[英]Should I use std::this_thread::yield in a busy loop if the latency matters?
我正在嘗試使用busy spin實現低延遲事件循環。 但是我不確定我是否應該在循環中放置一個std::this_thread::yield
。 再具體一點:
yield
如何“建議”重新安排? 上下文切換實際發生的頻率是多少? 如果延遲很重要,我應該在繁忙的循環中使用std :: this_thread :: yield嗎?
不會。如果系統繁忙,那么可能會在相當長的時間內停止您的線程,從而打破您的延遲要求。
產量如何“建議”重新安排?
它取決於底層的調度程序。 通常,它維護一個或多個想要運行的線程隊列; 調用yield
將當前線程放在隊列的后面,然后激活該隊列前面的線程。 如果隊列是空的(即沒有比處理器更多的可運行線程),那么屈服線程將繼續; 否則,另一個線程將運行,並且屈服線程將等待重新安排。
除了它可能導致的上下文切換之外,主要的開銷是多少?
如果線程繼續,則不會有上下文切換; 只是系統調用的成本,以及調度程序隊列的一些擺弄。
如果計划了另一個線程,那么您將不得不等到重新安排線程。 這可能是不可接受的,具體取決於您的延遲要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.