Linux 抢占式线程与非抢占式线程
有人能解释一下抢占式线程模型和非抢占式线程模型之间的区别吗 据我了解:Linux 抢占式线程与非抢占式线程,linux,multithreading,unix,pthreads,Linux,Multithreading,Unix,Pthreads,有人能解释一下抢占式线程模型和非抢占式线程模型之间的区别吗 据我了解: 非抢占式线程模型:一旦线程启动,在该线程完成其任务之前,无法停止该线程或将控制转移到其他线程 抢占式线程模型:允许运行时随时介入并将控制权从一个线程转移到另一个线程。高优先级线程的优先级高于低优先级线程 请某人: 解释理解是否正确 解释两种模式的优缺点 关于何时使用真正有用的内容的示例 如果我在Linux(SystemV或Pthread)中创建一个线程而没有提及任何选项(是否有??),那么默认情况下使用的线程模型是抢占式
- 非抢占式线程模型:一旦线程启动,在该线程完成其任务之前,无法停止该线程或将控制转移到其他线程李>
- 抢占式线程模型:允许运行时随时介入并将控制权从一个线程转移到另一个线程。高优先级线程的优先级高于低优先级线程李>
非抢占线程也称为协作线程。POE(Perl)就是一个例子。另一个例子是经典的MacOS(在OSX之前)。协作线程独占使用CPU,直到它们放弃它为止。然后调度程序选择另一个线程运行 抢占式线程可以像协作线程一样自愿放弃CPU,但当它们不这样做时,CPU将从它们那里拿走,调度器将启动另一个线程。POSIX和SysV线程属于这一类 协作线程的最大优点是更高的效率(至少在单核机器上)和更容易处理并发:它只在您放弃控制时存在,所以不需要锁定 抢占式线程的最大优点是更好的容错性:一个线程不能屈服并不会阻止所有其他线程执行。由于多线程同时执行,因此通常在多核机器上工作得更好。最后,你不必担心确保自己不断屈服。这可能真的很烦人,例如,一个沉重的数字运算循环 当然,你可以把它们混在一起。一个抢占式线程可以有许多协作线程在其中运行
yield()
(或其他什么)来实现)如果您使用非抢占式,并不意味着进程在等待I/O时不执行上下文切换。调度程序将根据调度模型选择另一个进程。我们必须信任该进程 非先发制人: