有人可以解释一下抢占式线程模型和非抢占式线程模型之间的区别吗?
据我了解:
- 非抢占式线程模型:一旦线程启动,它就无法停止,或者在线程完成其任务之前无法将控制权转移给其他线程。
- 抢占式线程模型: 允许运行时随时介入并将控制权从一个线程转移到另一个线程。较高优先级的线程优先于较低优先级的线程。
有人可以请吗:
- 说明理解是否正确。
- 解释两种模型的优缺点。
- 一个何时使用真正有用的例子。
- 如果我在 Linux(system v 或 Pthread)中创建线程而不提及任何选项(是否有任何选项??)默认使用的线程模型是抢占式线程模型?
最佳答案
- 不,您的理解并不完全正确。非抢占式(又名协作)线程通常手动让出控制权,以让其他线程在完成之前运行(尽管由该线程调用
yield()
(或其他)来实现这一点。 - 抢占线程更简单。协作线程的开销更少。
- 通常使用抢占式。如果您发现您的设计有很多线程切换开销,那么协作线程将是一种可能的优化。在许多(大多数?)情况下,这将是一笔相当大的投资,但返回却微乎其微。
- 是的,默认情况下您会获得抢占式线程,但如果您四处寻找 CThreads 包,它支持协作线程。很少有人(现在)想要合作线程,但我不确定它是否在过去十年内得到了更新......
关于linux - 抢占式线程与非抢占式线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147221/