WikiDer > История модели Актер - Википедия

History of the Actor model - Wikipedia

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

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

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

В 1963 году в области Искусственный интеллект, Джон Маккарти ввел ситуационные переменные в логику в ситуационном исчислении. В McCarthy and Hayes 1969 ситуация определяется как «полное состояние вселенной в определенный момент времени». В этом отношении ситуации Маккарти не подходят для использования в модели Актера, поскольку она не имеет глобальных состояний.

Из определения Актера видно, что происходят многочисленные события: локальные решения, создание Актеров, отправка сообщений, получение сообщений и определение того, как реагировать на следующее полученное сообщение. Частичное упорядочение таких событий было аксиоматизировано в модели Актера, и их связь с физикой исследована (см. Теория модели актера).

Отношение к физике

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

Модели до модели Актера

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

Лямбда-исчисление

В лямбда-исчисление из Церковь Алонсо можно рассматривать как самый ранний передача сообщений язык программирования (см. Hewitt, Bishop, and Steiger 1973; Абельсон и Сассман 1985). Например, приведенное ниже лямбда-выражение реализует древовидную структуру данных при наличии параметров для leftSubTree и rightSubTree. Когда такое дерево получает сообщение с параметром "getLeft", он возвращается leftSubTree и аналогично, когда ему дают сообщение "быть правым" он возвращается rightSubTree.

 λ (leftSubTree, rightSubTree) λ (сообщение) если (сообщение == "getLeft") тогда leftSubTree иначе если (сообщение == "getRight") тогда rightSubTree

Однако семантика лямбда-исчисления была выражена с использованием подстановка переменных в котором значения параметров подставлялись в тело вызванного лямбда-выражения. Модель подстановки не подходит для параллелизма, потому что она не допускает возможности обмен изменения ресурсов. Вдохновленный лямбда-исчислением, устный переводчик для языка программирования Лисп использует структуру данных, называемую средой, так что значения параметров не нужно подставлять в тело вызываемого лямбда-выражения. Это позволило разделить последствия обновления общих структур данных, но не предусматривал параллелизма.

Симула

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

Однако Simula использовала сопрограмма структура управления вместо истинного параллелизма.

Болтовня

Алан Кей находился под влиянием передачи сообщений при вызове по шаблону Планировщик в разработке Болтовня-71. Хьюитт был заинтригован Smalltalk-71, но его оттолкнула сложность коммуникации, которая включала вызовы со многими полями, включая Глобальный, отправитель, приемник, ответный стиль, положение дел, Ответить, селектор операторов, и Т. Д.

В 1972 году Кей посетил Массачусетский технологический институт и обсудил некоторые из своих идей построения Smalltalk-72 на базе Логотип работа Сеймур Паперт и модель вычислений «маленький человек», используемая для обучения детей программированию. Однако передача сообщений в Smalltalk-72 была довольно сложной. Код на языке рассматривался интерпретатором как просто поток токенов. В качестве Дэн Ингаллс позже описал это:

Первый обнаруженный (токен) (в программе) был найден в динамическом контексте, чтобы определить получателя следующего сообщения. Поиск имени начался со словаря классов текущей активации. В случае неудачи он перемещается к отправителю этой активации и так далее по цепочке отправителя. Когда привязка для токена была наконец найдена, его значение стало получателем нового сообщения, и интерпретатор активировал код для этого класса объекта.

Таким образом, модель передачи сообщений в Smalltalk-72 была тесно связана с конкретной машинной моделью и синтаксисом языка программирования, которые не допускали параллелизма. Кроме того, хотя система была загружена сама по себе, языковые конструкции не были формально определены как объекты, которые реагируют на Eval сообщения (см. обсуждение ниже). Это заставило некоторых поверить в то, что новая математическая модель параллельных вычислений, основанная на передаче сообщений, должна быть проще, чем Smalltalk-72.

Последующие версии языка Smalltalk в значительной степени следовали пути использования виртуальных методы Simula в структуре передачи сообщений программ. Однако Smalltalk-72 создал такие примитивы, как целые числа, числа с плавающей запятой, и Т. Д. в объекты. Авторы Simula рассматривали возможность превращения таких примитивов в объекты, но воздержались в основном из соображений эффективности. Ява сначала использовали прием как примитивных, так и объектных версий целых чисел, чисел с плавающей запятой, и Т. Д. В C # язык программирования (и более поздние версии Java, начиная с Java 1.5) принял менее элегантное решение использования заниматься боксом и распаковка, вариант которого ранее использовался в некоторых Лисп реализации.

Система Smalltalk стала очень влиятельной, вводя новшества в растровые изображения, персональные вычисления, интерфейс классового браузера и многие другие способы. Подробнее см. Kay's Ранняя история Smalltalk.[1] Между тем, усилия акторов в Массачусетском технологическом институте по-прежнему были сосредоточены на развитии науки и техники параллелизма более высокого уровня. (См. Статью Жан-Пьера Брио для идей, которые были развиты позже, о том, как включить некоторые виды параллелизма акторов в более поздние версии Smalltalk.)

Сети Петри

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

Потоки, блокировки и буферы (каналы)

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

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

Важной задачей при определении модели Актера было абстрагирование деталей реализации.

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

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

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

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

Схема

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

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

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

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

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

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

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

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

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

Смотрите также

Рекомендации

  1. ^ Кей, Алан (Март 1993 г.). «Ранняя история Smalltalk» (PDF). Уведомления ACM SIGPLAN. 28 (3): 69–75. Дои:10.1145/155360.155364. Архивировано из оригинал (PDF) на 2012-02-05.