Подтвердить что ты не робот

Scala: Почему актеры легкие?

Что делает актеров таким легким?

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

4b9b3361

Ответ 1

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

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

Источник

Ответ 2

Важная ссылка Актеры, объединяющие темы и события

Я не думаю, что мы должны укрепить этот актер в том, что легкий.

во-первых, актеры на основе потоков - это актеры в потоке, поэтому они не легкие.

участники, основанные на событиях, - это тот момент, когда мы начинаем чувствовать, что актеры - это легкий вес. это легкий вес, потому что он не имеет ожидание рабочего потока и переключается на другой, рабочий поток просто переключается с части данных на другую часть работы с данными, тем самым продолжая вращаться по эффективным вычислениям.