Scala и Erlang используют зеленые потоки?

Я читал много о том, как Scala и Erlang делают легкие потоки и их модель параллелизма (агенты).

Однако у меня есть свои сомнения.

Scala и Erlang используют подход, подобный старой модели потока, используемой Java (зеленые потоки)?

Например, предположите, что существует машина с 2 ядрами, таким образом, среда Scala/Erlang разветвит один поток на процессор? Другие потоки будут запланированы пространством пользователя (Scala VM / Erlang VM) среда. Это корректно?

Под капотом, как это действительно работает?

14
задан ryeguy 2 April 2010 в 13:17
поделиться

4 ответа

Erlang использует многозадачность в пространстве пользователя, задачи выполняются до тех пор, пока они не заблокируются или пока они не израсходуют свою долю "сокращений". Редукция нечетко определяется как единица вычисления.

До появления SMP-планировщика существовал только один поток ядра, принимающий выполняемые задачи. С SMP-планировщиком у вас есть несколько потоков ядра, принимающих задания и, таким образом, выполняющих код параллельно на многоядерных машинах. Количество потоков планировщика должно соответствовать количеству ядер. См. переключатель -smp [enable|auto|disable] в manpage erl.

Также был создан пул потоков ядра для загружаемых драйверов для выполнения блокирующих системных вызовов. Он называется пулом асинхронных потоков. См. +A size в manpage erl.

Дальнейшее чтение

24
ответ дан 1 December 2019 в 06:43
поделиться

Для получения последней информации о деталях реализации Erlang проверьте свежий доклад ( слайды ]).

4
ответ дан 1 December 2019 в 06:43
поделиться

Scala 2.8 использует пулы потоков Java. Облегченные акторы ( Reactor ) и более тяжелые акторы в облегченном режиме ( react {...} ) не используют свой собственный поток; скорее, когда у них есть сообщение, они берут поток, пока не закончат обработку сообщения, затем возвращают поток и не запускаются вообще, пока не появится следующее сообщение.

Эта статья дает достойное описание Актеров в 2.7; 2.8 ничем не отличается.

13
ответ дан 1 December 2019 в 06:43
поделиться

Scala использует базовую реализацию потока Java, которая использует собственные потоки .

Не могу сказать об Эрланге.

2
ответ дан 1 December 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: