大多数现代语言都支持协程的协程。他们通常将他们的协程称为轻量级线程,只需要很少的足迹就可以产生数万个。由于"线程太重了,为什么不让linux内核直接在线程内部支持协程,而不是让编程语言/ VM支持它呢?
答案 0 :(得分:2)
线程被认为是重量级的,因为它们是在内核中实现的。从一个线程到另一个线程的每个上下文切换都需要与内核交互。这就是为什么现代语言(例如Go)在用户空间中创建协同例程,将它们安排到运行时系统中的OS线程上。
这种混合设置允许进一步简化。例如。协同例程可以执行协作式多任务处理,只有在遇到阻塞操作(由语言定义)时才会调度到调度程序。当内部调度程序使用多个线程来运行其协同例程时,它们仍然会使用多个内核,而不会打扰内核来安排数万个线程并跟踪哪些线程被阻塞。