有人能解释一下先发制人的线程模型和非抢占线程模型的区别吗?
根据我的理解:
谁能请你:
如果理解是correct.
。
发布于 2010-11-10 17:56:44
yield()
(或其他什么)来使该线程更简单。协作线程具有较少的overhead.发布于 2010-11-10 17:47:44
非抢占性线程也称为协作线程.POE (Perl)就是一个例子。另一个例子是经典的Mac (在OS之前)。协作线程只有在放弃CPU之前才能使用CPU。然后,调度程序选择另一个线程来运行。
抢占式线程可以像协作线程一样自愿地放弃CPU,但是当它们不这样做时,就会从它们那里取出CPU,调度程序就会启动另一个线程。POSIX & SysV线程属于这一类别。
协作线程的最大优点是效率更高(至少在单核机器上)和更容易地处理并发性:只有当您放弃控制时,它才存在,因此不需要锁定。
先发制人线程的最大优点是更好的容错性:单个线程不能产生结果并不能阻止所有其他线程的执行。通常情况下,在多核机器上工作更好,因为多个线程一次执行。最后,你不必为确保自己不断地屈服而担心。这可能是非常恼人的内部,例如,一个沉重的数字处理循环。
你当然可以把它们混合起来。单个抢占线程可以在其中运行多个协作线程。
发布于 2014-11-22 11:22:22
如果使用non-preemptive,并不意味着流程在等待I/O时不执行上下文切换,调度程序将根据调度模型选择另一个进程。我们必须相信这个过程。
non-preemptive:
中的开销。
来处理。
抢占式
优势:
在这个模型中,我们有一个优先级,可以帮助我们更好地控制运行中的进程(
)。
的奖励
劣势:
一起带来的开销
https://stackoverflow.com/questions/4147221
复制相似问题