ConcurrencyL CSP против модели актора
12 мая 2022 г.В этой статье мы обсудим, как работают модели параллелизма CSP и акторов.
Взаимодействие последовательных процессов (CSP)
Общение последовательных процессов (CSP) — это модель, предложенная Тони Хоаром в 1978 году, в котором описывается взаимодействие между параллельными процессами. Он совершил прорыв в компьютерных науках, особенно в области параллелизма.
В CSP мы используем "каналы" для связи и синхронизации. Несмотря на то, что между процессами существует развязка, они по-прежнему связаны с каналом.
Это полностью синхронно, запись канала должна блокироваться, пока читатель канала не прочитает. Преимущество этого механизма, основанного на блокировке, заключается в том, что канал должен хранить только одно сообщение. Это также во многих отношениях легче рассуждать.
CSP реализован на таких языках, как Go с горутинами и каналы.
Модель актера
Модель актера была предложена Карлом Хьюиттом в 1973 году и принимает философия, что все является актером. Это похоже на философию «все есть объект», используемую некоторыми объектно-ориентированными языками программирования.
Это по своей сути асинхронно, отправитель сообщения не будет блокировать независимо от того, готов ли читатель получить из почтового ящика или нет, вместо этого сообщение помещается в очередь, обычно называемую * «почтовым ящиком» *. Это удобно, но об этом немного сложнее рассуждать, а почтовые ящики потенциально должны содержать много сообщений.
Каждый процесс имеет один почтовый ящик, сообщения помещаются в почтовый ящик получателя отправителем и извлекаются получателем.
Акторная модель реализована на таких языках, как Erlang и Scala. В мире Java для этого обычно используется Akka .
Сравнение
Некоторые различия между акторной моделью и сообщающимися последовательными процессами:
- Процессы в CSP анонимны, а акторы имеют личности.
- CSP использует каналы для передачи сообщений, тогда как участники используют почтовые ящики.
- Актор должен взаимодействовать только посредством доставки сообщений, что делает их не имеющими состояния.
- Сообщения CSP доставляются в том порядке, в котором они были отправлены.
- Модель актора была разработана для распределенных программ, поэтому ее можно масштабировать на несколько машин.
- Модель актера более развязана, чем CSP.
Вывод
Я думаю, что обе являются фантастическими моделями параллелизма и весьма недооценены. Я не уверен, почему все увлеклись многопоточной шумихой и забыли об этих моделях, учитывая, что они были здесь с 1970-х годов.
Приятно видеть, что такие языки, как Go, Rust, Scala и Elixir, возвращают к обсуждению эти мощные концепции. Лично я нахожу эти модели гораздо более естественными, чем многопоточность, STM, гильдии и т. д.
Как вы думаете, один лучше другого? Я хотел бы услышать ваши мысли.
Оригинал