我正在阅读Green Thread(维基百科)上的这个信息页面,我想知道:除了 Erlang 之外,还有哪些其他编程系统依赖于“绿色进程”?
编辑:“绿色线程!=绿色进程”
基于绿色工艺
- 二郎
- 地狱火
基于绿线
- 去
基于本机进程
- C、C++
更新:没有人直接回答这个问题,因此我接受了一个答案,该答案为我提供了有关一般绿色流程的更多信息。
我正在阅读Green Thread(维基百科)上的这个信息页面,我想知道:除了 Erlang 之外,还有哪些其他编程系统依赖于“绿色进程”?
编辑:“绿色线程!=绿色进程”
更新:没有人直接回答这个问题,因此我接受了一个答案,该答案为我提供了有关一般绿色流程的更多信息。
关于整个“绿线”的名称,请参阅此帖子的评论:
更严重的是,我很惊讶您使用 Java 阵营中的一个术语,而不是像“用户空间协作线程”这样的术语。好人 Peter van der Linden 解释了这个术语的起源:
当 Java 1.0 第一次出现在 Solaris 上时,它并没有使用原生 Solaris 库 libthread.so 来支持线程。相反,它使用了用 Java 编写的运行时线程支持,用于代号为“Green”的早期项目。该线程库后来被称为“绿色线程”。
我希望我们可以使用操作系统中的术语来代替,例如用户空间与线程的内核调度。毕竟是操作系统级别的区别。“绿色线程”这个名字只是 Java 历史。
据我了解,这些“绿色流程”实际上与绿色线程没有根本区别。缺乏共享状态是语言设计的结果,而不是任何技术或巨大的概念差异。Erlang 简单地说:
因此,两个进程无法访问相同的内存,即使它们可能在操作系统级别共享虚拟内存(我猜这使得 Erlang 更容易在没有操作系统级别线程的架构上实现)。
Java 在 1.2 之前一直使用它们。然后他们意识到拥有一个被调度两次的轻量级线程并不是那么有效。
现在,还有一个 Rust(参见 rust-lang.org),它有一个用于 N:M 线程的模块和一个用于内核线程的模块。