簡體   English   中英

如果延遲很重要,我應該在繁忙的循環中使用std :: this_thread :: yield嗎?

[英]Should I use std::this_thread::yield in a busy loop if the latency matters?

我正在嘗試使用busy spin實現低延遲事件循環。 但是我不確定我是否應該在循環中放置一個std::this_thread::yield 再具體一點:

  1. yield如何“建議”重新安排? 上下文切換實際發生的頻率是多少?
  2. 除了它可能導致的上下文切換之外,主要的開銷是多少?

如果延遲很重要,我應該在繁忙的循環中使用std :: this_thread :: yield嗎?

不會。如果系統繁忙,那么可能會在相當長的時間內停止您的線程,從而打破您的延遲要求。

產量如何“建議”重新安排?

它取決於底層的調度程序。 通常,它維護一個或多個想要運行的線程隊列; 調用yield將當前線程放在隊列的后面,然后激活該隊列前面的線程。 如果隊列是空的(即沒有比處理器更多的可運行線程),那么屈服線程將繼續; 否則,另一個線程將運行,並且屈服線程將等待重新安排。

除了它可能導致的上下文切換之外,主要的開銷是多少?

如果線程繼續,則不會有上下文切換; 只是系統調用的成本,以及調度程序隊列的一些擺弄。

如果計划了另一個線程,那么您將不得不等到重新安排線程。 這可能是不可接受的,具體取決於您的延遲要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM