gpt4 book ai didi

c++ - 如果延迟很重要,我应该在繁忙的循环中使用 std::this_thread::yield 吗?

转载 作者:太空狗 更新时间:2023-10-29 20:41:37 26 4
gpt4 key购买 nike

我正在尝试通过繁忙的旋转实现低延迟事件循环。但我不确定是否应该在循环中放入一个 std::this_thread::yield。具体来说:

  1. yield 如何“建议”重新安排?上下文切换实际发生的频率是多少?
  2. 除了可能导致的上下文切换之外,主要的开销是什么?

最佳答案

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

没有。如果系统繁忙,那么这可能会使您的线程停止相当长的时间,从而破坏您的延迟要求。

How does yield "suggest" a reschedule?

这取决于底层调度程序。通常,它会维护一个或多个要运行的线程队列;调用 yield 将当前线程放在队列的后面,然后激活该队列前面的线程。如果队列为空(即可运行线程数不多于处理器数),则让出线程将继续;否则,另一个线程将运行,让出线程将等待重新安排。

What's the main overhead except the context switch it may cause?

如果线程继续,则不会有上下文切换;只是系统调用的成本,以及一些摆弄调度程序队列的开销。

如果安排了另一个线程,则您必须等到您的线程被重新安排。这可能是 Not Acceptable ,具体取决于您的延迟要求。

关于c++ - 如果延迟很重要,我应该在繁忙的循环中使用 std::this_thread::yield 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com