Erlang旁边的其他系统基于“绿色流程”?

时间:2009-12-20 02:43:33

标签: architecture erlang system green-threads lightweight-processes

我正在Green Thread (Wikipedia)阅读这个信息丰富的页面,我想知道:其他编程系统还依赖于Erlang旁边的“绿色流程”?

修改:“绿线!= 绿色进程”

基于绿色流程

  • 二郎
  • 地狱

基于绿色线程

  • 开始

基于原生过程

  • C,C ++

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

4 个答案:

答案 0 :(得分:3)

关于整个“绿色线程”作为名称,请参阅comments on this post

  

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

     

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

我希望我们可以使用操作系统中的术语,例如用户空间vs线程的内核调度。毕竟,它是操作系统级别的区别。名称“绿色线程”仅是Java历史记录。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

Java使用它们直到1.2 ..然后他们意识到有一个更轻的线程被安排两次效率不高。

答案 3 :(得分:0)

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