线/纤维 - 澄清

时间:2015-11-15 19:11:50

标签: multithreading go fibers fiber

关于“纤维”与1)线程的关系以及2)它们被内核看作是什么,我对它有点困惑。

根据我的理解,光纤是由线程创建的线程,由其创建线程(即可能是调度程序?)管理。但是,对于所有密集的目的,我认为它仍然是一个“线程”,并由内核看到。

我从一位同事那里得到的解释是,光纤对内核完全不可见,完全在用户空间中运行,并且绝不是“线程”,根据他的电子邮件:

  

线程有时在用户空间库中实现,因此被调用   用户线程。内核不知道它们,因此它们是受管理的   在用户空间中安排。一些实现基于其用户线程   在几个内核线程之上,受益于多处理器   机器(M:N型号)。在本文中,术语“线程”(没有   内核或用户限定符)默认为引用内核线程。   由虚拟机实现的用户线程也称为绿色   线程。用户线程通常可以快速创建和管理,但是   不能利用多线程或多处理,并且会   如果所有关联的内核线程都被阻止,则会被阻止   如果有一些用户线程已准备好运行。

     

光纤是一种更协调的调度单位   预定:运行光纤必须明确“屈服”以允许另一个   光纤运行,这使得它们的实现比内核更容易   或用户线程。光纤可以安排在任何线程中运行   同样的过程。这允许应用程序获得性能   通过自己管理调度来改进,而不是依靠   内核调度程序(可能没有针对应用程序进行调整)。   诸如OpenMP之类的并行编程环境通常实现   通过纤维完成任务。与纤维密切相关的是协同程序,   协同作用是一种语言级别   构造,而纤维是系统级构造。

我希望从光纤的确切含义上得到一些更好的解释(就os /内核而言,它是一个实际的线程,并且只是由它的创建线程管理?)。

我通过谷歌搜索对它进行了广泛的研究,但我在任何地方找到了一个简单的答案,包括:“光纤是由线程创建和管理的线程。”

如果任何人有更多信息,他们可以分享或指向我,我们将不胜感激。我的同事们认为,Golang的Goroutines使用“纤维”,而那些纤维对操作系统是不可见的 - 因此,纤维的“正确”实现。我个人认为Goroutines与协同程序关系更密切,并且根本没有实现光纤/线程场景......

0 个答案:

没有答案