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


Модель а́кторов — математическая модель параллельных вычислений, строящаяся вокруг понятия актора (англ. actor «актёр; действующий субъект»), считающегося универсальным примитивом параллельного исполнения. Актор в данной модели взаимодействует путём обмена сообщениями с другими акторами, и каждый в ответ на получаемые сообщения может принимать локальные решения, создавать новые акторы, посылать свои сообщения, устанавливать, как следует реагировать на последующие сообщения.

Основные идеи и база для модели заложены в 1973 году публикации Хьюитта, Бишопа и Штайгера[1]. На процесс формирования модели оказали влияние языки программирования Лисп, Симула и ранние версии Smalltalk, а также методы параметрической защиты и коммутации пакетов. Основной мотивацией создания модели стала задача построения распределённых вычислительных систем на базе сотен и тысяч независимых компьютеров, оснащённых собственной локальной памятью и коммуникационными интерфейсами[2]. С появлением многопроцессорных систем и многоядерных архитектур интерес к модели акторов возрос также вне контекста распределённых систем.

В 1975 году разработана операционная семантика[en] для модели акторов[3][4]. В 1977 году выработана система аксиоматических законов для моделей акторов[5]. В 1981 году создана денотационная семантика[en] модели (семантика переходов)[2][6], развитая и обобщённая в 1985 году[7]; в результате этих работ теория моделей акторов признана развитой и проработанной.

В 1990-е годы созданы формализмы, не полностью соответствующие модели акторов (не формализующие гарантированную доставку сообщений), но имеющие практический интерес, в частности, несколько различных алгебр акторов[8][9] и интерпретацию на базе линейной логики[10].

По аналогии с философией объектно-ориентированного программирования, где каждый примитив рассматривается как объект, модель акторов выделяет в качестве универсальной сущности понятие «актора». Актор является вычислительной сущностью, которая в ответ на полученное сообщение может одновременно:

Не предполагается существования определённой последовательности вышеописанных действий и все они могут выполняться параллельно.