Какие другие системы, кроме Erlang, основаны на «зеленых процессах»? - PullRequest
5 голосов
/ 20 декабря 2009

Я читал эту информативную страницу на Green Thread (Википедия) , и мне интересно: какие другие системы программирования полагаются на "зеленые процессы", помимо Эрланга?

Редактировать : "Зеленая нить ! = Зеленый процесс"

Зеленый процесс на основе

  • Erlang
  • Inferno

Зеленая нить на основе

  • Go

На основе собственного процесса

  • C, C ++

Обновлено : Никто не ответил на вопрос напрямую, поэтому я принял ответ, который предоставил мне больше информации относительно Зеленых процессов в целом.

Ответы [ 4 ]

3 голосов
/ 21 декабря 2009

Относительно всей "зеленой нити" как названия, см. комментарии к этому сообщению :

Более серьезно, я удивлен, увидев, что вы используете термин из лагеря Java вместо чего-то менее грубого, такого как "совместная обработка в пространстве пользователя"; Хороший парень Питер ван дер Линден объясняет происхождение термина:

Когда Java 1.0 впервые появилась в Solaris, она не использовала собственную библиотеку Solaris libthread.so для поддержки потоков. Вместо этого он использовал поддержку потоков во время выполнения, которая была написана на Java для более раннего проекта с кодовым названием «Зеленый». Эта библиотека потоков стала известна как «зеленые потоки».

Хотелось бы вместо этого использовать терминологию из операционных систем, например, пространство пользователя против планирования потоков в ядре. В конце концов, это различие уровня операционной системы. Название «зеленая нить» - это только история Java.

2 голосов
/ 20 декабря 2009

Насколько я понимаю, эти "зеленые процессы" на самом деле принципиально не отличаются от зеленых нитей. Отсутствие общего состояния является результатом языкового дизайна, а не каких-либо технологических или огромных концептуальных различий. Эрланг просто:

  • Не имеет каких-либо глобальных переменных, которые были бы доступны из нескольких процессов
  • Разрешает связь между процессами только через явные сообщения
  • Неявно копирует параметры сообщения (большой недостаток этой техники)

Таким образом, два процесса не могут получить доступ к одной и той же памяти, даже если они имеют общую виртуальную память на уровне ОС (что, я думаю, упрощает реализацию Erlang на архитектурах, в которых нет потоков на уровне ОС ).

1 голос
/ 20 декабря 2009

Ява использовала их до 1.2 .. потом они поняли, что иметь более легкий поток, который запланирован дважды, не так эффективно.

0 голосов
/ 30 апреля 2014

Теперь есть также Rust (см. Rust-lang.org), который имеет модуль для потоков N: M и один для потоков ядра.

...