用户级线程和协同程序有什么区别?

时间:2013-11-24 00:23:23

标签: multithreading coroutine

用户级线程涉及在单个内核线程上运行的N个用户级线程。用户级线程的细节是什么?它与协同程序有何不同?

2 个答案:

答案 0 :(得分:1)

维基百科对该主题有一个非常深入的总结:Thread (computing)

对于Green threads,有一个VM执行指令,通常决定在两个指令之间切换线程。

使用协同程序,这两个函数在指定的点处相互产生,可能传递值,并且通常需要特殊的语言支持。例如。生产者屈服于消费者,传递物品。

答案 1 :(得分:0)

用户级线程背后的想法是让多个不同的逻辑线程在同一个程序中运行,但让用户程序处理从逻辑线程到内核线程(实际上已经调度)的映射,而不是让操作系统处理整个映射。这可以通过让用户程序处理调度来提高性能。从概念上讲,用户线程是抢占式多任务的一种实现,其中通过在其他线程运行时定期停止线程来并行运行多个作业。

另一方面,协程是标准函数调用和返回(“子例程”)的泛化,其中函数来回传递控制,在例程之间切换时传递值。协程之间来回切换是在协同程序本身的控制下;如果其中一个协同程序明确地为另一个协同程序生成值,则控制只从一个协程传递到另一个协同程序。这是协作式多任务的一个示例,其中多个作业并行完成,方法是手动协调任务中的各个步骤以及何时运行。

希望这有帮助!