Concurrency 为什么不';linux内核是否支持线程内协同路由?

Concurrency 为什么不';linux内核是否支持线程内协同路由?,concurrency,kernel,coroutine,Concurrency,Kernel,Coroutine,大多数现代语言都支持并发的协同程序。他们通常将他们的协同程序称为一个轻量级线程,您只需占用很少的空间就可以生成成千上万个线程。既然“线程太重”,为什么linux内核不直接在线程内部支持协同路由,而不是让编程语言/VM支持它呢?线程被认为是重量级的,因为它们是在内核中实现的。从一个线程到另一个线程的每个上下文切换都需要与内核进行交互。这就是为什么现代语言(如Go)在用户空间中创建协同例程,将它们调度到运行时系统中的OS线程上 这种混合设置允许进一步简化。例如,协同例程可以执行协同多任务处理,只有在

大多数现代语言都支持并发的协同程序。他们通常将他们的协同程序称为一个轻量级线程,您只需占用很少的空间就可以生成成千上万个线程。既然“线程太重”,为什么linux内核不直接在线程内部支持协同路由,而不是让编程语言/VM支持它呢?

线程被认为是重量级的,因为它们是在内核中实现的。从一个线程到另一个线程的每个上下文切换都需要与内核进行交互。这就是为什么现代语言(如Go)在用户空间中创建协同例程,将它们调度到运行时系统中的OS线程上


这种混合设置允许进一步简化。例如,协同例程可以执行协同多任务处理,只有在遇到阻塞操作(如语言所定义)时才向调度器屈服。当内部调度程序使用多个线程来运行其协同例程时,它们仍将使用多个内核,而不会打扰内核调度成千上万个线程并跟踪哪些线程被阻塞。

内核为什么会这样做?我的理解是,如果一种东西不断出现在不同的地方,那我们最好把它放在适当的地方。支持协同程序的内核似乎是正确的地方。但是为什么在所有地方中,内核都是正确的地方呢?协同程序在内核内部运行会有什么好处,而不仅仅是在用户模式下运行一个普通的旧库呢?谢谢。我明白你的意思。