use*_*878 13 performance multithreading polling wait
我看到了一个关于为什么"民意调查不好"的问题.在最小化一个线程使用的处理器时间量方面,进行自旋等待(即轮询while循环中所需的更改)或等待内核对象(例如,windows中的内核事件对象)会更好吗? ?
对于上下文,假设代码将需要在任何类型的处理器,单核,超线程,多核等上运行.还假设轮询或等待的线程无法继续,直到轮询结果令人满意为止轮询而不是等待.最后,线程开始等待(或轮询)与满足条件之间的时间可能从很短的时间到很长的时间不等.
由于操作系统可能在"等待"的情况下更有效地"轮询",我不希望看到"等待只是意味着其他人做投票"的论点,这是旧闻,并不一定100%准确.
Dar*_*uid 18
如果操作系统具有这些类型的并发原语的合理实现,那么等待内核对象肯定会更好.
除了其他原因之外,这使操作系统知道在相同的对象处于适当状态之前,不会为有问题的线程安排额外的时间片.否则,您有一个不断重新安排,上下文切换到,然后运行一段时间的线程.
您特别询问了最小化线程的处理器时间:在此示例中,内核对象上的线程阻塞将使用ZERO时间; 轮询线程会使用各种各样的时间.
此外,"别人正在投票"的论点不一定是真的.当内核对象进入适当的状态时,内核可以在该瞬间查看哪些线程正在等待该对象...然后安排其中一个或多个执行.在这种情况下,内核(或任何其他人)无需轮询任何内容.
等待是"更好"的行为方式.当您在等待内核对象时,您的线程将不会被授予任何CPU时间,因为调度程序已知没有准备好工作.只有在等待条件满足时,您的线程才会获得CPU时间.这意味着你不会不必要地占用CPU资源.