multithreading - 进程、线程、绿色线程、原型(prototype)线程、纤维、协程 : what's the difference?

标签 multithreading concurrency process parallel-processing fiber

我正在阅读有关并发的内容。我对那些具有令人困惑的相似定义的术语感到有些困惑。即:

  • 流程
  • 话题
  • “绿色线程”
  • 原型(prototype)线程
  • 纤维
  • 协程
  • Go 语言中的“Goroutines”

我的印象是,区别在于(1)是真正的并行还是多路复用; (2) 是否在CPU、操作系统或程序中进行管理;和(3..5)其他一些我无法识别的东西。

是否有一个简洁且明确的指南来说明这些并行方法之间的差异?

最佳答案

好的,我会尽力的。到处都有警告,但我将尽我最大的努力来表达我对这些术语的理解,并引用与我给出的定义相近的内容。

  • Process :操作系统管理的(可能)真正的并发,至少在有合适的硬件支持的情况下。存在于自己的地址空间内。
  • Thread :操作系统管理,与父线程及其所有其他线程位于同一地址空间内。可能是真正的并发,并且多任务是抢占式的。
  • Green Thread :这些是与线程概念相同的用户空间投影,但不受操作系统管理。可能不是真正的并发,除非可能有多个工作线程或进程同时为它们提供 CPU 时间,因此最好将其视为交错或多路复用。
  • Protothreads :我无法真正从中找出定义。我认为它们是交错的和程序管理的,但不要相信我的话。我的感觉是,它们本质上是同类“绿色线程”模型的特定于应用程序的实现,并针对应用程序域进行了适当的修改。
  • Fibers :操作系统管理。确切地说是线程,除了协作多任务处理之外,因此不是真正的并发。
  • Coroutines :完全是纤程,除了不受操作系统管理。
  • Goroutines :它们声称与其他线程不同,但它们似乎完全是绿色线程,例如,在单个地址空间中进行进程管理并多路复用到系统线程上。也许对 Go 有更多了解的人可以切入营销 Material 。

还值得注意的是,对于术语“进程”的并发理论还有其他理解,在process calculus中感觉。这个定义与上面的定义是正交的,但我只是认为值得一提,这样如果您在某处看到在这种意义上使用的过程,就不会产生混淆。

此外,请注意 parallel 之间的区别和 concurrent 。您在问题中可能使用了前者,而我认为您指的是后者。

关于multithreading - 进程、线程、绿色线程、原型(prototype)线程、纤维、协程 : what's the difference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324643/

相关文章:

multithreading - Golang中“打开的文件太多”而未打开任何文件

multithreading - 杀死从特权用户到根用户的信号

c - C中未初始化的局部变量中包含的值到底是什么?

c# - 如何从 Process.Start 中抛出 FileNotFoundException

java - 为什么将 Java 变量标记为 volatile 会降低同步性?

java - 在多线程中,为什么当我暂停一个线程执行时其他线程不工作

c++ - gSOAP 链接 C++ 服务器类以接受同一端口上的消息不起作用

c# - 如何知道所有线程池的线程是否已经完成了它的任务?

Java 如何线程化 GUI

java - 将消息传递给间接相关的参与者