Scala: Почему Агенты легки?

Что делает агентов настолько легкими?

Я даже не уверен, как они работают. Разве они не, разделяют потоки?

11
задан ROMANIA_engineer 25 December 2017 в 18:08
поделиться

1 ответ

Когда они говорят «облегченный», они имеют в виду, что каждый субъект не отображается в один поток.

JVM предлагает потоки разделяемой памяти с блокировками в качестве основной формы абстракций параллелизма . Но потоки общей памяти довольно тяжелы и влекут за собой серьезные потери производительности из-за накладных расходов на переключение контекста. Для реализации актора, основанной на однозначном сопоставлении с потоками JVM, полезная нагрузка процесса на актор Scala не будет такой легкой, как мы может порождать миллион экземпляров актора для определенного вычисления. Следовательно, акторы Scala были разработаны как легкие объекты событий, которые планируются и выполняются в базовом пуле рабочих потоков, который получает автоматически изменяется размер, когда все потоки блокируются при длительных операциях . Фактически, Scala реализует унифицированную модель акторов - на основе потоков и событий. Акторы Scala предлагают две формы механизмов приостановки - приостановку кадра полного стека (реализованную как получение) и приостановку на основе продолжения {{1} } закрытие (реализовано как реакция). В случае акторов, основанных на событиях, ожидание реакции представлено закрытием продолжения , т. Е. Закрытием, которое захватывает остальную часть вычислений актора. Когда приостановленный субъект получает сообщение , которое соответствует одному из шаблонов , указанных в актере, продолжение выполняется путем планирования задаче одному из рабочих потоков из базового пула потоков. В статье «Акторы, объединяющие потоки и события» Халлера и Одерски обсуждаются детали реализации .

Источник

17
ответ дан 3 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

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