我看到了一个关于为什么“投票不好”的问题。在最小化一个线程使用的处理器时间方面,最好进行自旋等待(即轮询 while 循环中所需的更改)或等待内核对象(例如 Windows 中的内核事件对象) ?
对于上下文,假设代码需要在任何类型的处理器、单核、超线程、多核等上运行。还假设轮询或等待的线程在轮询结果令人满意之前无法继续而不是等待。最后,线程开始等待(或轮询)和满足条件之间的时间可能从很短的时间到很长的时间不等。
由于操作系统在“等待”的情况下可能会更有效地“轮询”,我不想看到“等待只是意味着其他人进行轮询”的说法,这是旧新闻,不一定 100% 准确.
最佳答案
如果操作系统对这些类型的并发原语有合理的实现,那么等待内核对象肯定会更好。
除其他原因外,这让操作系统知道在等待的对象处于适当状态之前,不要为其他时间片安排有问题的线程。否则,您的线程会不断重新调度、上下文切换到,然后运行一段时间。
您特别询问了如何最大限度地减少线程的处理器时间:在此示例中,内核对象上的线程阻塞将使用零时间;轮询线程会使用各种时间。
此外,“其他人正在投票”的论点不一定是正确的。当内核对象进入适当的状态时,内核可以在那个时刻查看哪些线程正在等待该对象……然后调度其中一个或多个执行。在这种情况下,内核(或其他任何人)不需要轮询任何内容。
关于performance - 民意调查好还是等待好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937713/