Multithreading 绿色线程中的I/O阻塞

Multithreading 绿色线程中的I/O阻塞,multithreading,virtual-machine,green-threads,Multithreading,Virtual Machine,Green Threads,我读过关于绿色线程的书,能够理解这些线程是由VM或在运行时创建的,而不是由操作系统创建的,但是我不能理解下面的语句 当绿色线程执行阻塞系统调用时,不仅该线程被阻塞,而且进程中的所有线程都被阻塞 谁能解释一下这是怎么可能的吗?这其实很简单 “绿色线程”是在虚拟机内部以编程方式实现的,它在虚拟机之间调度CPU和内存,就像真正的操作系统在操作系统级进程和线程之间调度这些资源一样 但从操作系统的角度来看,只有一个线程——虚拟机本身,因此当它发出阻塞系统调用(代表它内部管理的“绿色线程”之一)时,这一个线

我读过关于绿色线程的书,能够理解这些线程是由VM或在运行时创建的,而不是由操作系统创建的,但是我不能理解下面的语句

当绿色线程执行阻塞系统调用时,不仅该线程被阻塞,而且进程中的所有线程都被阻塞


谁能解释一下这是怎么可能的吗?

这其实很简单

“绿色线程”是在虚拟机内部以编程方式实现的,它在虚拟机之间调度CPU和内存,就像真正的操作系统在操作系统级进程和线程之间调度这些资源一样


但从操作系统的角度来看,只有一个线程——虚拟机本身,因此当它发出阻塞系统调用(代表它内部管理的“绿色线程”之一)时,这一个线程自然被阻塞,无法执行任何操作,包括调度“绿色线程”,因此“世界停止”对他们来说也是如此。

维基百科的文章似乎在说,绿色线程本身并不能保证自身的任何并发性,要确保异步执行调用,取决于调度程序、绿色线程运行时或最终用户。但我真的不知道:p链接中引用的书可能会提供更多的上下文谢谢。因此,我是否可以得出结论,一个Erlang进程可以创建数千个绿色线程,但操作系统会将其视为一个线程,因此它会阻塞?@Mukul Chakravarty嗯,Erlang的情况稍微复杂一些(因为它使用了一个相当高级的VM),但一般原则仍然适用。单个Erlang VM将使用多个操作系统级线程(通常等于可用的CPU操作系统内核数量),每个线程充当调度程序,能够运行多个Erlang进程P(即“绿色线程”)。它还使用许多辅助“异步”线程来执行IO操作。请参阅以获得更深入的讨论。感谢您澄清了问题。