什么是多线程环境下的“Busy Spin”?
它有什么用处以及如何在多线程环境中用java实现它?
它以什么方式有助于提高应用程序的性能?
其他一些答案忽略了忙碌等待的真正问题。
除非您正在谈论一个您关心保存的应用程序电气功率,那么消耗 CPU 时间本身并不是一件坏事。只有当有其他线程或进程准备运行时,这才是不好的。它是really当准备运行的线程之一是繁忙等待循环正在等待的线程时,情况会很糟糕。
这才是真正的问题。在普通操作系统上运行的普通用户模式程序无法控制哪些线程在哪些处理器上运行,普通操作系统无法区分忙于等待的线程和正在工作的线程,即使操作系统知道线程正在忙等待,它也无法知道线程在等待什么。
因此,忙碌的服务员完全有可能等待许多毫秒(实际上是永恒),等待一个事件,而唯一可以使事件发生的线程则坐在一边(即在运行队列中)等待轮到使用CPU了。
繁忙等待通常用于严格控制哪些线程在哪些处理器上运行的系统中。当您遇到事件时,忙碌等待可能是等待事件的最有效方式。know导致它的线程实际上在不同的处理器上运行。当您为操作系统本身编写代码或编写在实时操作系统下运行的嵌入式实时应用程序时,通常会出现这种情况。
凯文·沃尔特斯 (Kevin Walters) 写过等待时间很短的案例。在普通操作系统上运行的受 CPU 限制的普通程序可能被允许在每个时间片中执行数百万条指令。因此,如果程序使用自旋锁来保护仅由几条指令组成的临界区,那么任何线程在临界区中时都不太可能丢失其时间片。这意味着,如果线程 A 发现自旋锁被锁定,那么持有该锁的线程 B 很可能实际上is运行在不同的CPU上。这就是为什么当您知道普通程序将在多处理器主机上运行时,可以在普通程序中使用自旋锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)