Введение

В информатике модель Actor, впервые опубликованная в 1973 году, является математической моделью одновременных вычислений.

Порядок событий по сравнению с глобальным состоянием

Основная проблема в определении модели Actor заключается в том, что она не предусматривает глобальные состояния, поэтому вычислительный шаг не может быть определен как переход от одного глобального состояния к следующему глобальному состоянию, как это было сделано во всех предыдущих моделях вычислений. В 1963 году в области искусственного интеллекта Джон Маккарти ввел ситуационные переменные в логике в Ситуационном исчислении. В книге Маккарти и Хейса 1969 года ситуация определяется как "полное состояние Вселенной в какой-то момент времени". В этом отношении ситуации Маккарти не подходят для использования в модели Actor, поскольку у нее нет глобальных состояний. Из определения Актора можно увидеть, что происходит множество событий: местные решения, создание Акторов, отправка сообщений, получение сообщений и определение того, как реагировать на следующее полученное сообщение. Частичные порядки таких событий были аксиоматизированы в модели Актора и их связь с физикой исследована (см. Теория модели Актора).

Связь с физикой

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

Модели до модели Actor

Модель Actor основана на предыдущих моделях вычислений.

Симулятор

Simula 67 стала первопроходцем в использовании передачи сообщений для вычислений, мотивированных применением дискретных приложений моделирования событий. Эти приложения стали большими и немодульными в предыдущих языках моделирования. На каждом этапе большой центральной программе приходится проходить и обновлять состояние каждого объекта моделирования, которое меняется в зависимости от состояния любого из объектов моделирования, с которым он взаимодействовал на этом этапе. Кристен Найгаард и Оле Йохан Даль разработали идею (впервые описанную на семинаре IFIP в 1967 году) о наличии методов на каждом объекте, которые обновляли бы его собственное локальное состояние на основе сообщений от других объектов. Кроме того, они ввели структуру классов для объектов с наследованием. Их инновации значительно улучшили модульность программ. Однако Simula использовал структуру управления coroutine вместо истинного совпадения.

- Небольшой разговор .

Алан Кей был под влиянием передачи сообщений в образе направленного призыва Планера при разработке Smalltalk 71. Хьюита заинтриговал Smalltalk 71, но его отпугнула сложность коммуникации, которая включала в себя вызовы с множеством полей, включая глобальный, отправитель, получатель, стиль ответа, статус, ответ, селектор оператора и т. Д. В 1972 году Кей посетил MIT и обсудил некоторые из своих идей для Smalltalk 72, основанных на работе Сеймура Паперта "Лого" и модели вычислений "маленького человека", используемой для обучения детей программированию. Однако передача сообщений Smalltalk 72 была довольно сложной. Код языка рассматривался переводчиком как просто поток знаков. Как позже описал это Дэн Ингаллс: Первый (токен), встреченный (в программе), был найден в динамическом контексте, чтобы определить получателя последующего сообщения. Поиск имени начался с класса словарь текущей активации. Если это не удалось, то он перешел к отправителю этой активации и так далее вверх по цепочке отправителя. Когда для токена наконец была найдена связь, его значение стало получателем нового сообщения, и интерпретатор активировал код для класса этого объекта. Таким образом, модель передачи сообщений в Smalltalk 72 была тесно связана с конкретной моделью машины и синтаксисом языка программирования, который не поддавался синхронности. Кроме того, хотя система была загружена сама по себе, языковые конструкции не были формально определены как объекты, которые реагируют на сообщения Eval (см. обсуждение ниже). Это привело к тому, что некоторые полагали, что новая математическая модель одновременного вычисления, основанная на передаче сообщений, должна быть проще, чем Smalltalk 72. Последующие версии языка Smalltalk в значительной степени следовали по пути использования виртуальных методов Simula в структуре передачи сообщений программами. Однако Smalltalk 72 создал примитивы, такие как целые числа, числа с плавающей запятой и т. Д. в объекты. Авторы Simula рассматривали возможность превращения таких примитивных объектов в объекты, но в основном воздерживались от этого по соображениям эффективности. Java вначале использовала возможность иметь как примитивные, так и объектные версии целых чисел, числа с плавающей запятой и т. д. Язык программирования C# (и более поздние версии Java, начиная с Java 1.5) приняли менее элегантное решение использования боксирования и разбоксирования, вариант которого ранее использовался в некоторых реализациях Lisp. Система Smalltalk стала очень влиятельной, внедряя инновации в бит-карточных дисплеях, персональных компьютерах, интерфейсе браузера класса и многих других способах. Подробности см. в книге Кей "Ранняя история мелких разговоров". Между тем, усилия Актера в МТИ оставались сосредоточены на развитии науки и техники высокого уровня совпадения. (См. статью Жана Пьера Брио для идей, которые были разработаны позже о том, как включить некоторые виды совпадения актеров в более поздние версии Smalltalk.)

Сети Петри

До разработки модели Actor сети Петри широко использовались для моделирования недетерминированных вычислений. Однако было широко признано, что они имеют важное ограничение: они моделируют поток управления, но не поток данных. Следовательно, они не были легко компонованы, тем самым ограничивая их модульность. Хьюитт указал на другую трудность сетей Петри: одновременное действие. То есть, атомный этап вычислений в сетях Петри - это переход, в котором токены одновременно исчезают с входных мест перехода и появляются в выходных местах. Физическая основа использования примитива с таким типом одновременности казалась ему сомнительной. Несмотря на эти очевидные трудности, сети Петри по-прежнему являются популярным подходом к моделированию конкурентности и все еще являются предметом активных исследований.

Нити, замки и буферы (каналы)

До модели Actor, параллельность определялась в низкоуровневых терминах машинных потоков, замков и буферов (каналов). Конечно, реализация модели Actor обычно использует эти аппаратные возможности. Однако нет никаких причин, по которым модель не могла бы быть реализована непосредственно в аппаратном обеспечении без обнаружения каких-либо аппаратных потоков и замков. Кроме того, нет никакой необходимой связи между количеством акторов, нитей и замков, которые могут участвовать в вычислениях. В реализациях модели Actor можно свободно использовать нитки и замки любым способом, который совместим с законами для Actor.

Абстрагирование деталей реализации

Важной проблемой при определении модели Actor было абстрагирование деталей реализации. Например, рассмотрим следующий вопрос: "Есть ли у каждого актера очередь, в которой его сообщения хранятся до тех пор, пока они не будут получены актором для обработки?" Карл Хьюитт выступал против включения таких очередей в качестве неотъемлемой части модели Actor. Одним из соображений было то, что такие очереди могут быть смоделированы как актеры, которые получают сообщения и коммуникации. Еще одним соображением было то, что некоторые участники не будут использовать такие очереди в своей фактической реализации. Например, вместо этого у актера может быть сеть арбитров. Конечно, есть математическая абстракция, которая представляет собой последовательность сообщений, полученных Актором. Но эта последовательность возникла только в процессе работы Актера. На самом деле порядок этой последовательности может быть неопределенным (см. Неопределенность в одновременных вычислениях). Другим примером абстрагирования деталей реализации был вопрос о интерпретации: "Должна ли интерпретация быть неотъемлемой частью модели Actor?" Идея интерпретации заключается в том, что Актер будет определяться тем, как его программный скрипт обрабатывает сообщения. (Таким образом, актеры будут определены аналогично Lisp, который был "определен" процедурой метациркулярного интерпретатора, названной written in Lisp.) Хьюитт выступал против того, чтобы интерпретация была неотъемлемой частью модели Actor. Одним из соображений было то, что для обработки сообщений, программный сценарий Актера сам должен иметь программный сценарий (который, в свою очередь, должен был бы иметь)! Еще одним соображением было то, что некоторые актеры не будут использовать интерпретацию в своей собственной интерпретации. Например, вместо этого Actor может быть реализован в аппаратном обеспечении. Конечно, нет ничего плохого в интерпретации как таковой. Также реализация интерпретаторов с использованием сообщений является более модульной и расширяемой, чем монолитный интерпретаторный подход Lisp.

Операционная модель

Тем не менее, прогресс в разработке модели был устойчивым. В 1975 году Ирен Грайф опубликовала первую операционную модель в своей диссертации.

Схема

Джеральд Сассман и Гай Стил затем заинтересовались актерами и опубликовали статью о своем интерпретаторе схемы, в которой они пришли к выводу, что "мы обнаружили, что "актеры" и выражения lambda были идентичны в реализации". Согласно Хьюиту, ламбда-расчет способен выразить некоторые виды параллелизма, но, в целом, не совпадение, выраженное в модели Актора. С другой стороны, модель Актора способна выразить все параллелизм в ламбда-расчете.

Законы для актеров

Через два года после того, как Грайф опубликовала свою операционную модель, Карл Хьюитт и Генри Бейкер опубликовали "Законы для актеров".

Доказательство непрерывности вычислимых функций

Используя законы модели актора, Хьюитт и Бейкер доказали, что любой актор, который ведет себя как функция, является непрерывным в смысле, определенном Даной Скотт (см. денотационную семантику).

Спецификации и доказательства

Аки Йонезава опубликовал свои спецификации и методы проверки для актеров. Расс Аткинсон и Карл Хьюитт опубликовали статью о спецификации и методах доказательства для сериализаторов, обеспечивающих эффективное решение для инкапсулирования общих ресурсов для контроля параллельности.

Математическая характеристика с использованием теории доменов

Наконец, через восемь лет после первой публикации актера, Уилл Клингер (основываясь на работе Айрин Грейф 1975, Гордон Плоткин 1976, Майкл Смит 1978, Генри Бейкер 1978, Франц, Хоар, Леман и де Роувер 1979, и Милн и Милнор 1979) опубликовал первую удовлетворительную математическую денотационную модель, включающую неограниченный недетерминизм с использованием теории доменов в своей диссертации в 1981 году (см. Модель Клингера). Впоследствии Хьюитт [2006] дополнил диаграммы временем прибытия, чтобы построить технически более простую денотационную модель, которую легче понять. См. История денотационной семантики.