大多数现代语言都支持协同机制来实现并发。它们通常将它们的协同线称为一条重量轻的线,只需很少的脚印就可以生成数万条。既然“线程太重”,为什么linux内核不直接在线程内部支持协同,而不让编程语言/ VM支持它呢?
发布于 2013-12-30 11:34:19
线程之所以被认为是重量级的,正是因为它们是在内核中实现的。每个上下文从一个线程切换到另一个线程需要与内核进行交互。这就是为什么现代语言(如Go)在用户空间中创建共同例程,并将它们调度到运行时系统中的OS线程上。
这种混合设置允许进一步简化。例如,协同例程可以执行协作多任务处理,只有在遇到阻塞操作(如语言所定义的)时,才会屈服于调度程序。当内部调度程序使用多个线程运行其共同例程时,它们仍将使用多个内核,而不打扰内核调度数万个线程,并跟踪哪些线程被阻塞。
https://stackoverflow.com/questions/20837889
复制相似问题