首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Thread.SpinWait在单核CPU上是如何有用的?

Thread.SpinWait在单核CPU上是如何有用的?
EN

Stack Overflow用户
提问于 2016-06-01 20:58:02
回答 1查看 289关注 0票数 2

在单个核心机器上,如果正在运行的线程旋转仅仅因为等待另一个线程当前持有的锁的释放而等待,那么旋转不是浪费CPU时间吗?因为当前持有锁的线程仍然处于等待队列中?

因此,只有在有多个核心的机器上,旋转才能等待锁的释放吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-01 21:20:34

是的,在单核机器上,旋转等待是无用的,也是适得其反的--但这样的机器越来越罕见。

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

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

通常,不管核心数量多少,您都应该更喜欢*Slim类型,如果您确实需要旋转(除非您正在实现自己的同步原语),则应该使用SpinWait结构(除非您正在实现您自己的同步原语),因为除非这样做有意义,否则它不会实际旋转。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37578650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档