ConcurrencyL CSP против модели актора

ConcurrencyL CSP против модели актора

12 мая 2022 г.

В этой статье мы обсудим, как работают модели параллелизма CSP и акторов.


Взаимодействие последовательных процессов (CSP)


csp


Общение последовательных процессов (CSP) — это модель, предложенная Тони Хоаром в 1978 году, в котором описывается взаимодействие между параллельными процессами. Он совершил прорыв в компьютерных науках, особенно в области параллелизма.


В CSP мы используем "каналы" для связи и синхронизации. Несмотря на то, что между процессами существует развязка, они по-прежнему связаны с каналом.


Это полностью синхронно, запись канала должна блокироваться, пока читатель канала не прочитает. Преимущество этого механизма, основанного на блокировке, заключается в том, что канал должен хранить только одно сообщение. Это также во многих отношениях легче рассуждать.


CSP реализован на таких языках, как Go с горутинами и каналы.


Модель актера


актер


Модель актера была предложена Карлом Хьюиттом в 1973 году и принимает философия, что все является актером. Это похоже на философию «все есть объект», используемую некоторыми объектно-ориентированными языками программирования.


Это по своей сути асинхронно, отправитель сообщения не будет блокировать независимо от того, готов ли читатель получить из почтового ящика или нет, вместо этого сообщение помещается в очередь, обычно называемую * «почтовым ящиком» *. Это удобно, но об этом немного сложнее рассуждать, а почтовые ящики потенциально должны содержать много сообщений.


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


Акторная модель реализована на таких языках, как Erlang и Scala. В мире Java для этого обычно используется Akka .


Сравнение


Некоторые различия между акторной моделью и сообщающимися последовательными процессами:


  • Процессы в CSP анонимны, а акторы имеют личности.

  • CSP использует каналы для передачи сообщений, тогда как участники используют почтовые ящики.

  • Актор должен взаимодействовать только посредством доставки сообщений, что делает их не имеющими состояния.

  • Сообщения CSP доставляются в том порядке, в котором они были отправлены.

  • Модель актора была разработана для распределенных программ, поэтому ее можно масштабировать на несколько машин.

  • Модель актера более развязана, чем CSP.

Вывод


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


Приятно видеть, что такие языки, как Go, Rust, Scala и Elixir, возвращают к обсуждению эти мощные концепции. Лично я нахожу эти модели гораздо более естественными, чем многопоточность, STM, гильдии и т. д.


Как вы думаете, один лучше другого? Я хотел бы услышать ваши мысли.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE