Введение
Формальная модель в теории параллелизма
В информатике, коммуникационные последовательные процессы (CSP) — это формальный язык для описания моделей взаимодействия в конкурентных системах. Он относится к семейству математических теорий параллелизма, известных как алгебры процессов или исчисления процессов, основанных на передаче сообщений по каналам. CSP оказал значительное влияние на разработку языка программирования occam, а также повлиял на разработку языков программирования, таких как Limbo, RaftLib, Erlang, Go.
CSP был впервые описан в статье Тони Хоара в 1978 году, но с тех пор значительно эволюционировал. CSP находит практическое применение в промышленности как инструмент для спецификации и верификации конкурентных аспектов различных систем, таких как T9000 Transputer, а также систем безопасной электронной коммерции. Теория CSP сама по себе также остается предметом активных исследований, включая работы по расширению области ее практического применения (например, увеличению масштаба систем, которые можно эффективно анализировать).
Неофициальное описание
Как следует из названия, CSP позволяет описывать системы в терминах компонентных процессов, которые работают независимо и взаимодействуют друг с другом исключительно посредством обмена сообщениями. Однако "последовательная" часть в названии CSP сейчас несколько неточно отражает суть, поскольку современный CSP позволяет определять компонентные процессы как последовательные процессы, так и как параллельную композицию более простых процессов. Связи между различными процессами и способы взаимодействия каждого процесса с окружением описываются с помощью различных операторов алгебры процессов. Используя этот алгебраический подход, можно легко создавать довольно сложные описания процессов из небольшого числа примитивных элементов.
Синтаксис
Синтаксис CSP определяет "допустимые" способы объединения процессов и событий. Пусть e – событие, а X – множество событий. Тогда основной синтаксис CSP можно определить следующим образом:
Обратите внимание, что в целях краткости синтаксис, представленный выше, не включает процесс, представляющий расхождение, а также различные операторы, такие как параллельное с алфавитной индексацией, конвейерная связь и индексированные выборы.
Формальная семантика
CSP наделена несколькими различными формальными семантиками, которые определяют смысл синтаксически корректных выражений CSP. Теория CSP включает в себя взаимосогласованную денотационную семантику, алгебраическую семантику и операционную семантику.
Сравнение с моделью актера
В той мере, в какой она касается конкурентных процессов, обменивающихся сообщениями, модель актора в целом схожа с CSP. Однако эти две модели делают принципиально разные выборы в отношении предоставляемых примитивов: процессы CSP анонимны, а акторы обладают идентификаторами. CSP использует явные каналы для передачи сообщений, в то время как системы акторов передают сообщения именованным акторам-получателям. Эти подходы можно рассматривать как дуальные, поскольку процессы, принимающие сообщения через один канал, фактически имеют идентификатор, соответствующий этому каналу, в то время как связь между акторами, основанная на именах, может быть нарушена путем создания акторов, функционирующих как каналы. Передача сообщений в CSP по сути предполагает встречу (rendezvous) между процессами, участвующими в отправке и получении сообщения, то есть отправитель не может передать сообщение, пока получатель не будет готов его принять. В отличие от этого, передача сообщений в системах акторов принципиально асинхронна, то есть передача и прием сообщений не обязаны происходить одновременно, и отправители могут отправлять сообщения до того, как получатели будут готовы их принять. Эти подходы также можно рассматривать как дуальные: системы, основанные на встрече, могут быть использованы для построения буферизованных коммуникаций, работающих как асинхронные системы обмена сообщениями, а асинхронные системы могут быть использованы для построения коммуникаций, основанных на встрече, с использованием протокола сообщения/подтверждения для синхронизации отправителей и получателей. Следует отметить, что вышеупомянутые свойства относятся не обязательно к оригинальной работе Хоара по CSP, а скорее к современной интерпретации этой идеи, как это видно в реализациях, таких как Go и core.async в Clojure. В оригинальной статье каналы не были центральной частью спецификации, и процессы отправителя и получателя фактически идентифицировали друг друга по имени.
CSP processes are anonymous, while actors have identities. CSP uses explicit channels for message passing, whereas actor systems transmit messages to named destination actors. These approaches may be considered duals of each other, in the sense that processes receiving through a single channel effectively have an identity corresponding to that channel, while the name based coupling between actors may be broken by constructing actors that behave as channels. CSP message passing fundamentally involves a rendezvous between the processes involved in sending and receiving the message, i. e. the sender cannot transmit a message until the receiver is ready to accept it. In contrast, message passing in actor systems is fundamentally asynchronous, i. e. message transmission and reception do not have to happen at the same time, and senders may transmit messages before receivers are ready to accept them. These approaches may also be considered duals of each other, in the sense that rendezvous based systems can be used to construct buffered communications that behave as asynchronous messaging systems, while asynchronous systems can be used to construct rendezvous style communications by using a message/acknowledgement protocol to synchronize senders and receivers. Note that the aforementioned properties do not necessarily refer to the original CSP paper by Hoare, but rather the modern incarnation of the idea as seen in implementations such as Go and Clojure's core. async. In the original paper, channels were not a central part of the specification, and the sender and receiver processes actually identify each other by name.