Какие другие системы, кроме Erlang, основаны на "зеленых процессах"?

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

Изменить: "Зеленая нить != Зеленый процесс"

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

  • Erlang
  • ад

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

  • Идти

Родной процесс на основе

  • C, C++

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам