gpt4 book ai didi

.net - Thread.SpinWait在单核CPU上有什么用?

转载 作者:行者123 更新时间:2023-12-03 12:55:07 25 4
gpt4 key购买 nike

在单核计算机上,如果正在运行的线程只是因为正在等待释放另一个线程当前持有的锁而旋转等待,那么旋转等待就不会浪费CPU时间,因为当前持有线程的线程正在等待反正在等待队列上锁?

因此,仅在具有多核的机器上旋转等待释放锁才有值(value)吗?

因此,这个问题也适用于所有Slim对象,例如SemaphoreSlimReaderWriterLockSlim

最佳答案

是的,在单核计算机上旋转等待是没有用的,并且适得其反,但是这种计算机越来越少见。

.NET 4.0引入了更高级的 SpinWait 结构。如果在单核计算机上使用它,它将立即放弃当前线程的时间片,并允许在其他线程上取得进展,因为忙于等待任何时间长度都不会占用处理器。 (在这种意义上的自旋等待对于硬件驱动程序仍然有意义,即使在单核计算机上也是如此,因为硬件可以在后台取得进步,但是硬件驱动程序当然不是用IL编写的。)

同样,如果在单核计算机上使用,*Slim类型将不使用旋转。它们仍然值得在可能的情况下使用,因为与它们的非Slim对应对象不同,它们被编写得更快,更简单并且需要更少的资源(Semaphore由内核对象支持,例如,SemaphoreSlim不是)。

通常,无论内核数量多少,都应该首选*Slim类型,如果确实需要旋转,则应使用SpinWait结构(除非您实现自己的同步原语,否则几乎不要旋转),因为除非有意义,否则它实际上不会旋转这样做。

关于.net - Thread.SpinWait在单核CPU上有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578650/

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