(以下项目有不同的目标,但我很有趣知道它们如何“暂停”)
问题
Thread.sleep
- 它会影响系统性能吗?它是否会占用线程的等待时间?
关于什么Monitor.Wait
?他们“等待”的方式有何不同?他们的等待会占用一个线程吗?
关于什么RegisteredWaitHandle
?此方法接受一个委托,该委托在等待时执行
句柄已发出信号。在等待的同时,事实并非如此系一根线。
所以有些线程被暂停并且可以被委托唤醒,而其他线程只是等待?旋转 ?
有人可以让事情更清楚吗?
edit
http://www.albahari.com/threading/part2.aspx http://www.albahari.com/threading/part2.aspx
Both Thread.Sleep
and Monitor.Wait
把线放进去the WaitSleepJoin state http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx:
WaitSleepJoin:线程被阻塞。这可能是调用的结果
请求锁的 Thread::Sleep 或 Thread::Join — 例如,通过
调用 Monitor::Enter 或 Monitor::Wait — 或等待线程
同步对象,例如 ManualResetEvent。
RegisteredWaitHandle
是通过调用获得的注册等待单个对象 http://msdn.microsoft.com/en-us/library/system.threading.threadpool.registerwaitforsingleobject.aspx并通过一个WaitHandle
。一般来说,这个类的所有后代都使用阻塞机制,所以调用Wait
将再次将线放入WaitSleepJoin
(e.g. AutoResetEvent
).
这是来自 MSDN 的另一段引用:
RegisterWaitForSingleObject 方法检查当前状态
指定对象的WaitHandle。如果对象的状态是无信号的,
该方法注册一个等待操作。执行等待操作
通过线程池中的一个线程。委托由工作人员执行
当对象的状态变为有信号或超时时线程
间隔时间过去。
所以池中有一个线程确实等待为信号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)