5

我正在阅读Green Thread(维基百科)上的这个信息页面,我想知道:除了 Erlang 之外,还有哪些其他编程系统依赖于“绿色进程”?

编辑:“绿色线程!=绿色进程”

基于绿色工艺

  • 二郎
  • 地狱火

基于绿线

基于本机进程

  • C、C++

更新:没有人直接回答这个问题,因此我接受了一个答案,该答案为我提供了有关一般绿色流程的更多信息。

4

4 回答 4

3

关于整个“绿线”的名称,请参阅此帖子的评论

更严重的是,我很惊讶您使用 Java 阵营中的一个术语,而不是像“用户空间协作线程”这样的术语。好人 Peter van der Linden 解释了这个术语的起源:

当 Java 1.0 第一次出现在 Solaris 上时,它并没有使用原生 Solaris 库 libthread.so 来支持线程。相反,它使用了用 Java 编写的运行时线程支持,用于代号为“Green”的早期项目。该线程库后来被称为“绿色线程”。

我希望我们可以使用操作系统中的术语来代替,例如用户空间与线程的内核调度。毕竟是操作系统级别的区别。“绿色线程”这个名字只是 Java 历史。

于 2009-12-21T08:52:23.203 回答
2

据我了解,这些“绿色流程”实际上与绿色线程没有根本区别。缺乏共享状态是语言设计的结果,而不是任何技术或巨大的概念差异。Erlang 简单地说:

  • 没有可从多个进程访问的任何类型的全局变量
  • 仅允许通过显式消息在进程之间进行通信
  • 隐式复制消息参数(这种技术的最大缺点)

因此,两个进程无法访问相同的内存,即使它们可能在操作系统级别共享虚拟内存(我猜这使得 Erlang 更容易在没有操作系统级别线程的架构上实现)。

于 2009-12-20T19:34:27.300 回答
1

Java 在 1.2 之前一直使用它们。然后他们意识到拥有一个被调度两次的轻量级线程并不是那么有效。

于 2009-12-20T03:01:33.673 回答
0

现在,还有一个 Rust(参见 rust-lang.org),它有一个用于 N:M 线程的模块和一个用于内核线程的模块。

于 2014-04-30T13:58:14.827 回答