Модель параллельных вычислений
Модель актора в информатике — это математическая модель параллельных вычислений , которая рассматривает актора как базовый строительный блок параллельных вычислений. В ответ на полученное сообщение актор может: принимать локальные решения, создавать больше акторов, отправлять больше сообщений и определять, как реагировать на следующее полученное сообщение. Акторы могут изменять свое собственное частное состояние , но могут влиять друг на друга только косвенно через обмен сообщениями (устраняя необходимость в синхронизации на основе блокировок ).
Модель акторов возникла в 1973 году. [1] Она использовалась как в качестве основы для теоретического понимания вычислений , так и в качестве теоретической основы для нескольких практических реализаций параллельных систем . Связь модели с другой работой обсуждается в модели акторов и исчислениях процессов .
История
По словам Карла Хьюитта , в отличие от предыдущих моделей вычислений, модель акторов была вдохновлена физикой , включая общую теорию относительности и квантовую механику . [ требуется ссылка ] На нее также повлияли языки программирования Lisp , Simula , ранние версии Smalltalk , системы на основе возможностей и коммутация пакетов . Ее разработка была «мотивирована перспективой высокопараллельных вычислительных машин, состоящих из десятков, сотен или даже тысяч независимых микропроцессоров, каждый со своей локальной памятью и коммуникационным процессором, взаимодействующих через высокопроизводительную коммуникационную сеть». [2] С тех пор появление массового параллелизма посредством многоядерных и многоядерных компьютерных архитектур возродило интерес к модели акторов.
После публикации Хьюитта, Бишопа и Штайгера в 1973 году Ирен Грейф разработала операционную семантику для модели акторов в рамках своего докторского исследования. [3] Два года спустя Генри Бейкер и Хьюитт опубликовали набор аксиоматических законов для систем акторов. [4] [5] Другие важные вехи включают диссертацию Уильяма Клингера 1981 года, в которой была представлена денотационная семантика, основанная на доменах власти [2], и диссертацию Гула Аги 1985 года, в которой была дополнительно разработана семантическая модель на основе переходов, дополнительная к модели Клингера. [6] Это привело к полной разработке теории модели акторов .
Основная работа по внедрению программного обеспечения была проделана Рассом Аткинсоном, Джузеппе Аттарди, Генри Бейкером, Джерри Барбером, Питером Бишопом, Питером де Йонгом, Кеном Каном, Генри Либерманом, Карлом Мэннингом, Томом Рейнхардтом, Ричардом Штайгером и Дэном Терио в группе Message Passing Semantics Group Массачусетского технологического института (MIT). Исследовательские группы под руководством Чака Сейтца в Калифорнийском технологическом институте (Caltech) и Билла Далли в MIT построили компьютерные архитектуры, которые дополнительно развили передачу сообщений в модели. См. Реализация модели акторов .
Исследования модели актора проводились в Калифорнийском технологическом институте , Лаборатории Токоро Киотского университета , Корпорации микроэлектроники и компьютерных технологий (MCC), Лаборатории искусственного интеллекта Массачусетского технологического института , SRI , Стэнфордском университете , Иллинойсском университете в Урбане-Шампейне [ 7] , Университете Пьера и Марии Кюри (Университет Париж 6), Пизанском университете , Лаборатории Ёнэдзава Токийского университета , Centrum Wiskunde & Informatica (CWI) и других местах.
Фундаментальные концепции
Модель актора принимает философию, что все является актором . Это похоже на философию «все является объектом», используемую некоторыми объектно-ориентированными языками программирования.
Актор — это вычислительная сущность, которая в ответ на полученное сообщение может одновременно:
- отправлять конечное количество сообщений другим субъектам;
- создать конечное число новых участников;
- обозначить поведение, которое будет использоваться для следующего полученного сообщения.
Определенной последовательности вышеперечисленных действий не существует, и они могут выполняться параллельно.
Разделение отправителя и отправляемых сообщений стало фундаментальным достижением модели актора, позволяющим использовать асинхронную коммуникацию и структуры управления в качестве шаблонов передачи сообщений . [8]
Получатели сообщений идентифицируются по адресу, иногда называемому «почтовым адресом». Таким образом, актор может общаться только с теми акторами, чьи адреса у него есть. Он может получить их из сообщения, которое он получает, или, если адрес принадлежит актору, которого он сам создал.
Модель акторов характеризуется неотъемлемой параллельностью вычислений внутри и между акторами, динамическим созданием акторов, включением адресов акторов в сообщения и взаимодействием только посредством прямой асинхронной передачи сообщений без ограничений на порядок поступления сообщений.
Формальные системы
За прошедшие годы было разработано несколько различных формальных систем, которые позволяют рассуждать о системах в модели акторов. К ним относятся:
Существуют также формализмы, которые не полностью соответствуют модели акторов, поскольку они не формализуют гарантированную доставку сообщений, включая следующие (см. Попытки связать семантику акторов с алгеброй и линейной логикой ):
Приложения
Модель актора может использоваться в качестве основы для моделирования, понимания и рассуждений о широком спектре параллельных систем . [15] Например:
- Электронная почта ( email ) может быть смоделирована как система акторов. Учетные записи моделируются как акторы, а адреса электронной почты как адреса акторов.
- Веб-службы можно моделировать как акторы с конечными точками протокола SOAP , смоделированными как адреса акторов.
- Объекты с блокировками ( например , как в Java и C# ) могут быть смоделированы как сериализатор , при условии, что их реализации таковы, что сообщения могут поступать непрерывно (возможно, путем хранения во внутренней очереди ). Сериализатор — это важный тип актора, определяемый свойством, что он постоянно доступен для поступления новых сообщений; каждое сообщение, отправленное сериализатору, гарантированно поступит. [16]
- Нотация тестирования и управления тестами ( TTCN ), как TTCN-2, так и TTCN-3 , довольно близко следует модели актора. В TTCN актор — это тестовый компонент: либо параллельный тестовый компонент (PTC), либо основной тестовый компонент (MTC). Тестовые компоненты могут отправлять и получать сообщения от удаленных партнеров (одноранговые тестовые компоненты или интерфейс тестовой системы), причем последний идентифицируется по его адресу. Каждый тестовый компонент имеет дерево поведения, привязанное к нему; тестовые компоненты работают параллельно и могут динамически создаваться родительскими тестовыми компонентами. Встроенные языковые конструкции позволяют определять действия, которые должны быть выполнены при получении ожидаемого сообщения из внутренней очереди сообщений, например, отправка сообщения другому одноранговому объекту или создание новых тестовых компонентов.
Семантика передачи сообщений
Модель актора касается семантики передачи сообщений .
Спор о неограниченном недетерминизме
Можно утверждать, что первыми параллельными программами были обработчики прерываний . В ходе своей обычной работы компьютер должен был иметь возможность получать информацию извне (символы с клавиатуры, пакеты из сети и т. д. ). Поэтому, когда поступала информация, выполнение компьютера прерывалось и вызывался специальный код (называемый обработчиком прерываний), чтобы поместить информацию в буфер данных , откуда ее можно было впоследствии извлечь.
В начале 1960-х годов прерывания начали использоваться для имитации одновременного выполнения нескольких программ на одном процессоре. [17] Наличие параллелизма с общей памятью породило проблему управления параллелизмом . Первоначально эта проблема была задумана как проблема взаимного исключения на одном компьютере. Эдсгер Дейкстра разработал семафоры , а позднее, между 1971 и 1973 годами, [18] Тони Хоар [19] и Пер Бринч Хансен [20] разработали мониторы для решения проблемы взаимного исключения. Однако ни одно из этих решений не предоставляло конструкцию языка программирования, которая инкапсулировала бы доступ к общим ресурсам. Эта инкапсуляция была позже достигнута конструкцией сериализатора ([Hewitt and Atkinson 1977, 1979] и [Atkinson 1980]).
Первые модели вычислений ( например , машины Тьюринга , постановки Поста, лямбда-исчисление и т . д. ) были основаны на математике и использовали глобальное состояние для представления вычислительного шага (позже обобщенного в [McCarthy and Hayes 1969] и [Dijkstra 1976] см. Упорядочение событий в сравнении с глобальным состоянием ). Каждый вычислительный шаг был от одного глобального состояния вычисления к следующему глобальному состоянию. Подход глобального состояния был продолжен в теории автоматов для конечных автоматов и стековых машин push down , включая их недетерминированные версии. Такие недетерминированные автоматы обладают свойством ограниченного недетерминизма ; то есть, если машина всегда останавливается при запуске в своем начальном состоянии, то существует ограничение на количество состояний, в которых она останавливается.
Эдсгер Дейкстра далее развил недетерминированный подход глобального состояния. Модель Дейкстры породила спор относительно неограниченного недетерминизма (также называемого неограниченной неопределенностью ), свойства параллелизма , при котором величина задержки в обслуживании запроса может стать неограниченной в результате арбитража конкуренции за общие ресурсы, при этом по-прежнему гарантируя, что запрос в конечном итоге будет обслужен . Хьюитт утверждал, что модель актора должна предоставлять гарантию обслуживания. В модели Дейкстры, хотя между выполнением последовательных инструкций на компьютере может быть неограниченное количество времени, (параллельная) программа, которая началась в четко определенном состоянии, могла завершиться только в ограниченном количестве состояний [Dijkstra 1976]. Следовательно, его модель не могла предоставить гарантию обслуживания. Дейкстра утверждал, что невозможно реализовать неограниченный недетерминизм.
Хьюитт утверждал иначе: не существует предела тому, сколько времени требуется вычислительной схеме, называемой арбитром, для установления состояния (см. метастабильность (электроника) ). [21] Арбитры используются в компьютерах для решения проблемы, когда компьютерные часы работают асинхронно по отношению к внешнему вводу, например , вводу с клавиатуры, доступу к диску, сетевому вводу и т. д. Таким образом, для получения сообщения, отправленного на компьютер, может потребоваться неограниченное время, и в то же время компьютер может пройти неограниченное количество состояний.
Модель актора характеризуется неограниченным недетерминизмом, который был отражен в математической модели Уилла Клингера с использованием теории доменов . [2] В модели актора нет глобального состояния. [ сомнительно – обсудить ]
Прямая коммуникация и асинхронность
Сообщения в модели актора не обязательно буферизуются. Это был резкий разрыв с предыдущими подходами к моделям параллельных вычислений. Отсутствие буферизации вызвало много недоразумений во время разработки модели актора и до сих пор является спорным вопросом. Некоторые исследователи утверждали, что сообщения буферизуются в «эфире» или «среде». Кроме того, сообщения в модели актора просто отправляются (как пакеты в IP ); нет необходимости в синхронном рукопожатии с получателем.
Создание акторов плюс адреса в сообщениях означают переменную топологию
Естественным развитием модели актора стало разрешение адресов в сообщениях. Под влиянием сетей с коммутацией пакетов [1961 и 1964] Хьюитт предложил разработать новую модель параллельных вычислений, в которой сообщения не имели бы никаких обязательных полей вообще: они могли бы быть пустыми. Конечно, если бы отправитель сообщения хотел, чтобы получатель имел доступ к адресам, которых у получателя еще нет, адрес должен был бы быть отправлен в сообщении.
Например, актору может потребоваться отправить сообщение актору-получателю, от которого он позже ожидает получить ответ, но ответ фактически будет обработан третьим компонентом актора, который был настроен на получение и обработку ответа (например, другим актором, реализующим шаблон наблюдателя ). Исходный актор может сделать это, отправив сообщение, которое включает сообщение, которое он хочет отправить, вместе с адресом третьего актора, который будет обрабатывать ответ. Этот третий актор, который будет обрабатывать ответ, называется возобновлением ( иногда также называется продолжением или стековым кадром ). Когда актор-получатель готов отправить ответ, он отправляет ответное сообщение на адрес актора возобновления , который был включен в исходное сообщение.
Таким образом, способность акторов создавать новых акторов, с которыми они могут обмениваться сообщениями, а также способность включать адреса других акторов в сообщения, дает акторам возможность создавать и участвовать в произвольно изменяемых топологических отношениях друг с другом, подобно тому, как объекты в Simula и других объектно-ориентированных языках также могут быть реляционно составлены в изменяемые топологии объектов, обменивающихся сообщениями.
По сути своей параллельный
В отличие от предыдущего подхода, основанного на составлении последовательных процессов, модель актора была разработана как изначально параллельная модель. В модели актора последовательность была особым случаем, который вытекает из параллельных вычислений, как объясняется в теории моделей акторов .
Нет требований к порядку прибытия сообщений
Хьюитт выступил против добавления требования, чтобы сообщения приходили в том порядке, в котором они отправляются актору. Если требуется упорядочение выходных сообщений, то его можно смоделировать с помощью актора очереди, который предоставляет эту функциональность. Такой актор очереди будет ставить в очередь пришедшие сообщения, чтобы их можно было извлечь в порядке FIFO . Таким образом, если актор X
отправил сообщение M1
актору Y
, а затем X
отправил другое сообщение M2
, Y
нет требования, что M1
прибывает Y
до M2
.
В этом отношении модель актора отражает системы коммутации пакетов , которые не гарантируют, что пакеты должны быть получены в том же порядке, в котором они были отправлены. Отсутствие гарантии порядка доставки позволяет коммутации пакетов буферизировать пакеты, использовать несколько путей для отправки пакетов, повторно отправлять поврежденные пакеты и обеспечивать другие оптимизации.
Для большего примера, акторам разрешено конвейеризировать обработку сообщений. Это означает, что в ходе обработки сообщения M1
актор может назначить поведение, которое будет использоваться для обработки следующего сообщения, а затем фактически начать обработку другого сообщения M2
до того, как оно завершит обработку M1
. То, что актору разрешено конвейеризировать обработку сообщений, не означает, что он должен конвейеризировать обработку. Является ли сообщение конвейерным — это инженерный компромисс. Как внешний наблюдатель узнает, была ли обработка сообщения актором конвейеризирована? В определении актора нет двусмысленности, созданной возможностью конвейеризации. Конечно, в некоторых реализациях можно выполнить оптимизацию конвейера неправильно, и в этом случае может возникнуть непредвиденное поведение.
Местность
Еще одной важной характеристикой модели актора является локальность.
Локальность означает, что при обработке сообщения актор может отправлять сообщения только на адреса, которые он получает в сообщении, адреса, которые у него уже были до получения сообщения, и адреса для акторов, которые он создает во время обработки сообщения. (Но см. Синтез адресов акторов.)
Также локальность означает, что нет одновременных изменений в нескольких местах. В этом она отличается от некоторых других моделей параллелизма, например , модели сети Петри , в которой токены одновременно удаляются из нескольких мест и помещаются в другие места.
Составление систем акторов
Идея объединения систем акторов в более крупные системы является важным аспектом модульности , который был разработан в докторской диссертации Гул Аги [6] и позднее развит Гул Агой, Яном Мейсоном, Скоттом Смитом и Кэролин Талкотт [9] .
Поведение
Ключевым нововведением стало введение поведения, заданного как математическая функция для выражения того, что делает актор при обработке сообщения, включая указание нового поведения для обработки следующего поступившего сообщения. Поведения предоставили механизм для математического моделирования совместного использования в параллелизме.
Поведения также освободили модель актора от деталей реализации, например , интерпретатора потока токенов Smalltalk-72. Однако эффективная реализация систем, описанных моделью актора, требует обширной оптимизации. Подробности см. в разделе Реализация модели актора .
Моделирование других систем параллельной обработки
Другие системы параллелизма ( например , исчисление процессов ) могут быть смоделированы в модели актора с использованием двухфазного протокола фиксации . [22]
Теорема о вычислительном представлении
В модели актора существует теорема о вычислительном представлении для систем, которые закрыты в том смысле, что они не получают сообщений извне. Математическое обозначение, обозначенное закрытой системой , строится из начального поведения и функции, аппроксимирующей поведение. Они получают все более и более хорошие аппроксимации и строят обозначение (смысл) для следующим образом [Hewitt 2008; Clinger 1981]:
Таким образом, может быть математически охарактеризовано в терминах всех его возможных поведений (включая те, которые связаны с неограниченным недетерминизмом). Хотя это не реализация , его можно использовать для доказательства обобщения тезиса Чёрча-Тьюринга-Россера-Клина [Kleene 1943]:
Следствием вышеприведенной теоремы является то, что конечный субъект может недетерминированно отреагировать несчетным [ уточнить ] числом различных выходов.
Связь с логическим программированием
Одной из основных мотиваций для разработки модели актора было понимание и решение проблем структуры управления, которые возникли при разработке языка программирования Planner . [ требуется ссылка ] После того, как модель актора была изначально определена, важной задачей стало понимание мощности модели относительно тезиса Роберта Ковальски о том, что «вычисление может быть включено в дедукцию». Хьюитт утверждал, что тезис Ковальски оказался ложным для параллельных вычислений в модели актора (см. Неопределенность в параллельных вычислениях ).
Тем не менее, были предприняты попытки расширить логическое программирование на параллельные вычисления. Однако Хьюитт и Ага [1991] утверждали, что полученные системы не были дедуктивными в следующем смысле: вычислительные шаги систем параллельного логического программирования не следуют дедуктивно из предыдущих шагов (см. Неопределенность в параллельных вычислениях ). Недавно логическое программирование было интегрировано в модель актора таким образом, что сохраняется логическая семантика. [21]
Миграция
Миграция в модели акторов — это способность акторов менять местоположение. Например , в своей диссертации Аки Ёнезава смоделировал почтовое отделение, в которое акторы-клиенты могут входить, менять местоположение внутри во время работы и выходить. Актор, который может мигрировать, может быть смоделирован с помощью актора местоположения, который меняется, когда актёр мигрирует. Однако достоверность этого моделирования является спорной и является предметом исследования. [ необходима цитата ]
Безопасность
Безопасность субъектов может быть обеспечена следующими способами:
Синтез адресов актеров
Тонким моментом в модели актора является возможность синтезировать адрес актора. В некоторых случаях безопасность может быть использована для предотвращения синтеза адресов (см. Безопасность). Однако, если адрес актора — это просто строка битов, то, очевидно, его можно синтезировать, хотя может быть сложно или даже невозможно угадать адрес актора, если строки битов достаточно длинные. SOAP использует URL для адреса конечной точки, где можно достичь актора. Поскольку URL — это строка символов, его, очевидно, можно синтезировать, хотя шифрование может сделать ее угадывание практически невозможным.
Синтез адресов акторов обычно моделируется с помощью сопоставления. Идея заключается в использовании системы акторов для выполнения сопоставления с реальными адресами акторов. Например, на компьютере структура памяти компьютера может быть смоделирована как система акторов, которая выполняет сопоставление. В случае адресов SOAP это моделирование DNS и остальной части сопоставления URL .
Контраст с другими моделями параллельной передачи сообщений
Первоначальная опубликованная работа Робина Милнера по параллелизму [23] также была примечательна тем, что она не была основана на составлении последовательных процессов. Его работа отличалась от модели акторов, поскольку она была основана на фиксированном количестве процессов фиксированной топологии, обменивающихся числами и строками с использованием синхронной коммуникации. Первоначальная модель общающихся последовательных процессов (CSP) [24], опубликованная Тони Хоаром , отличалась от модели акторов, поскольку она была основана на параллельной композиции фиксированного количества последовательных процессов, связанных в фиксированной топологии, и обменивающихся сообщениями с использованием синхронной передачи сообщений на основе имен процессов (см. История модели акторов и исчислений процессов ). Более поздние версии CSP отказались от коммуникации, основанной на именах процессов, в пользу анонимной коммуникации через каналы, подход, также используемый в работе Милнера по исчислению общающихся систем и π-исчислению .
Эти ранние модели Милнера и Хоара обе имели свойство ограниченного недетерминизма. Современная теоретическая CSP ([Hoare 1985] и [Roscoe 2005]) явно обеспечивает неограниченный недетерминизм.
Сети Петри и их расширения (например, цветные сети Петри) похожи на акторы в том, что они основаны на асинхронной передаче сообщений и неограниченном недетерминизме, в то время как они похожи на ранние CSP в том, что они определяют фиксированные топологии элементарных этапов обработки (переходов) и хранилищ сообщений (мест).
Влияние
Модель акторов оказала влияние как на развитие теории, так и на практическую разработку программного обеспечения.
Теория
Модель актора повлияла на развитие π-исчисления и последующих исчислений процессов . В своей лекции Тьюринга Робин Милнер писал: [25]
Теперь чистое лямбда-исчисление строится всего с двумя типами вещей: терминами и переменными. Можем ли мы достичь той же экономии для исчисления процессов? Карл Хьюитт со своей моделью акторов ответил на этот вызов давно; он заявил, что значение, оператор значений и процесс должны быть одним и тем же типом вещей: актором.
Эта цель произвела на меня впечатление, поскольку она подразумевает однородность и полноту выражения... Но прошло много времени, прежде чем я смог увидеть, как достичь этой цели в терминах алгебраического исчисления...
Итак, в духе Хьюитта, наш первый шаг — потребовать, чтобы все вещи, обозначаемые терминами или доступные по именам — значения, регистры, операторы, процессы, объекты — были одного рода вещами; все они должны быть процессами.
Упражняться
Модель акторов оказала большое влияние на коммерческую практику. Например, Twitter использовал акторы для масштабируемости. [26] Кроме того, Microsoft использовала модель акторов при разработке своей библиотеки асинхронных агентов. [27] Существует множество других библиотек акторов, перечисленных в разделе библиотек акторов и фреймворков ниже.
Решенные проблемы
По словам Хьюитта [2006], модель акторов решает проблемы компьютерной и коммуникационной архитектуры, параллельных языков программирования и веб-сервисов , включая следующие:
- Масштабируемость : проблема масштабирования параллелизма как локально, так и нелокально.
- Прозрачность : преодоление пропасти между локальным и нелокальным параллелизмом. В настоящее время прозрачность является спорным вопросом. Некоторые исследователи [ кто? ] отстаивают строгое разделение между локальным параллелизмом с использованием параллельных языков программирования (например, Java и C# ) и нелокальным параллелизмом с использованием SOAP для веб-сервисов . Строгое разделение приводит к отсутствию прозрачности, что вызывает проблемы, когда желательно/необходимо переключаться между локальным и нелокальным доступом к веб-сервисам (см. Распределенные вычисления ).
- Непоследовательность : несогласованность является нормой, поскольку все очень большие системы знаний о взаимодействии человека с информационной системой несогласованны. Эта несогласованность распространяется на документацию и спецификации очень больших систем (например, программное обеспечение Microsoft Windows и т. д.), которые внутренне несогласованны.
Многие из идей, представленных в модели акторов, теперь также находят применение в многоагентных системах по тем же причинам [Hewitt 2006b 2007b]. Ключевое отличие заключается в том, что агентские системы (в большинстве определений) накладывают дополнительные ограничения на акторов, обычно требуя, чтобы они использовали обязательства и цели.
Программирование с актерами
Ряд различных языков программирования используют модель актора или некоторые ее вариации. Эти языки включают:
Ранние языки программирования акторов
- Акт 1, 2 и 3 [28] [29]
- Акт-разговор [30]
- Ани [31]
- Кантор [32]
- Розетка [33]
Более поздние языки программирования акторов
Библиотеки и фреймворки акторов
Библиотеки или фреймворки акторов также были реализованы для того, чтобы разрешить программирование в стиле акторов в языках, в которых нет встроенных акторов. Некоторые из этих фреймворков:
Смотрите также
Ссылки
- ^ Хьюитт, Карл ; Бишоп, Питер; Штайгер, Ричард (1973). «Универсальный модульный акторный формализм для искусственного интеллекта». IJCAI.
- ^ abcd Уильям Клингер (июнь 1981 г.). «Основы семантики акторов». Диссертация на соискание ученой степени доктора математики. Массачусетский технологический институт. hdl :1721.1/6935.
- ^ ab Irene Greif (август 1975). «Семантика взаимодействующих параллельных процессов». Докторская диссертация EECS. Массачусетский технологический институт.
- ^ ab Генри Бейкер ; Карл Хьюитт (август 1977 г.). «Законы для взаимодействия параллельных процессов». IFIP.
- ^ "Законы для взаимодействия параллельных процессов" (PDF) . 10 мая 1977 г. Архивировано (PDF) из оригинала 24 июня 2016 г. Получено 11 июня 2014 г.
- ^ abc Gul Agha (1986). «Акторы: модель параллельных вычислений в распределенных системах». Докторская диссертация. MIT Press. hdl :1721.1/6952.
- ^ "Home". Osl.cs.uiuc.edu. Архивировано из оригинала 2013-02-22 . Получено 2012-12-02 .
- ^ Карл Хьюитт. Рассмотрение структур управления как шаблонов передачи сообщений. Журнал искусственного интеллекта. Июнь 1977 г.
- ^ ab Gul Agha; Ian Mason; Scott Smith; Carolyn Talcott (январь 1993 г.). "Основы вычислений акторов". Журнал функционального программирования .
- ^ Карл Хьюитт (27.04.2006). «Что такое приверженность? Физическая, организационная и социальная» (PDF) . Архивировано (PDF) из оригинала 11.02.2021 . Получено 26.05.2006 .
- ^ Мауро Гаспари; Джанлуиджи Заваттаро (май 1997 г.). «Алгебра актеров» (PDF) . Формальные методы для открытых объектно-ориентированных распределенных систем . Технический отчет UBLCS-97-4. Болонский университет. стр. 3–18. дои : 10.1007/978-0-387-35562-7_2. ISBN 978-1-4757-5266-3. Архивировано (PDF) из оригинала 2018-07-26 . Получено 2019-04-08 .
- ^ М. Гаспари; Г. Заваттаро (1999). «Алгебра акторов». Формальные методы для открытых объектно-ориентированных систем.
- ^ Гул Агха ; Прасанна Тати (2004). «Алгебраическая теория акторов и ее применение к простому объектно-ориентированному языку» (PDF) . От ОО к ФМ (Dahl Festschrift) LNCS 2635. Архивировано из оригинала (PDF) 2004-04-20.
- ^ Джон Дарлингтон; YK Guo (1994). «Формализация акторов в линейной логике». Международная конференция по объектно-ориентированным информационным системам.
- ^ «Что такое модель актёра и когда её следует использовать?». Мэтт Фердерер . Архивировано из оригинала 2021-08-25 . Получено 2021-08-25 .
- ^ Чунг, Лео (2017-07-25). «Почему Akka и модель актора сияют для приложений IoT». InfoWorld . Архивировано из оригинала 2021-08-25 . Получено 2021-08-25 .
- ^ Хансен, Пер Бринч (2002). Истоки параллельного программирования: от семафоров до удаленных вызовов процедур . Springer. ISBN 978-0-387-95401-1.
- ^ Хансен, Пер Бринч (1996). «Мониторы и параллельный Паскаль: личная история». Сообщения ACM : 121–172.
- ↑ Хоар, Тони (октябрь 1974 г.). «Мониторы: концепция структурирования операционной системы». Communications of the ACM . 17 (10): 549–557. doi : 10.1145/355620.361161 . S2CID 1005769.
- ^ Хансен, Пер Бринч (июль 1973 г.). Принципы операционной системы . Prentice-Hall.
- ^ ab Hewitt, Carl (2012). "Что такое вычисление? Модель актора против модели Тьюринга". В Zenil, Hector (ред.). Вычислимая Вселенная: понимание вычислений и исследование природы как вычислений. Посвящается памяти Алана М. Тьюринга в 100-ю годовщину со дня его рождения . World Scientific Publishing Company.
- ^ Фредерик Кнабе. Распределенный протокол для канальной связи с выбором PARLE 1992 Архивировано 31 августа 2017 г. на Wayback Machine .
- ^ Робин Милнер. Процессы: математическая модель вычислительных агентов в коллоквиуме по логике 1973.
- ^ CAR Hoare. Коммуникационные последовательные процессы CACM. Август 1978 г.
- ^ Милнер, Робин (1993). «Элементы взаимодействия». Сообщения ACM . 36 : 78–89. doi : 10.1145/151233.151240 .
- ^ «Как Twitter масштабируется «Блог Вайминга Мока». Waimingmok.wordpress.com. 2009-06-27. Архивировано из оригинала 2021-02-05 . Получено 2012-12-02 .
- ^ «Программирование на основе акторов с использованием библиотеки асинхронных агентов. Архивировано 31 августа 2017 г. на Wayback Machine », MSDN, сентябрь 2010 г.
- ↑ Генри Либерман (июнь 1981 г.). «Предварительный просмотр Акта 1». MIT AI memo 625. hdl :1721.1/6350.
- ↑ Генри Либерман (июнь 1981 г.). «Думать о множестве вещей одновременно, не запутавшись: параллелизм в первом акте». Меморандум MIT AI 626. hdl :1721.1/6351.
- ^ Жан-Пьер Брио. Acttalk: Фреймворк для объектно-ориентированного параллельного программирования — проектирование и опыт 2-го франко-японского семинара. 1999. Архивировано 28.06.2018 на Wayback Machine
- ^ Кен Кан. Вычислительная теория анимации. Архивировано 18 августа 2017 г. в Wayback Machine. Докторская диссертация MIT EECS. Август 1979 г.
- ^ Уильям Атас и Нанетт Боден Кантор: Система программирования акторов для научных вычислений. Архивировано 08.04.2019 в Wayback Machine в трудах семинара NSF по объектно-ориентированному параллельному программированию. 1988. Специальный выпуск уведомлений SIGPLAN.
- ^ Даррелл Вулк. Разработка агентов InfoSleuth с использованием Rosette: язык, основанный на актерах. Труды семинара CIKM '95 по интеллектуальным информационным агентам. 1995.
- ^ Дедекер Дж., Ван Катсем Т., Мостинкс С., Д'Хондт Т., Де Мойтер В. Окружающее программирование в AmbientTalk. В «Материалах 20-й Европейской конференции по объектно-ориентированному программированию (ECOOP), Дэйв Томас (ред.), Конспекты лекций по информатике, том 4067, стр. 230–254, Springer-Verlag.», 2006 г.
- ^ Даррил К. Тафт (2009-04-17). «Microsoft готовит новый параллельный язык программирования». Eweek.com. Архивировано из оригинала 29 июля 2012 года . Получено 2012-12-02 .
- ^ "Humus". Dalnefre.com. Архивировано из оригинала 2021-02-07 . Получено 2012-12-02 .
- ^ Брандауэр, Стефан и др. (2015). «Параллельные объекты для многоядерных процессоров: взгляд на параллельный язык». Формальные методы многоядерного программирования . Springer International Publishing: 1–56.
- ^ "The Pony Language". Архивировано из оригинала 2018-09-04 . Получено 2016-03-21 .
- ^ Клебш, Сильван; Дроссопулу, София; Блессинг, Себастьян; Макнил, Энди (2015). «Отрицать возможности для безопасных, быстрых акторов». Труды 5-го Международного семинара по программированию на основе акторов, агентов и децентрализованного управления — AGERE! 2015. стр. 1–12. doi :10.1145/2824815.2824816. ISBN 9781450339018. S2CID 415745.Сильван Клебш, София Дроссопулу, Себастьян Блессинг, Энди Макнил
- ^ "The P Language". GitHub . 2019-03-08. Архивировано из оригинала 2021-01-15 . Получено 2017-02-01 .
- ^ "Язык P#". GitHub . 2019-03-12. Архивировано из оригинала 2021-03-23 . Получено 2017-02-01 .
- ^ "class Ractor". Ruby-lang.org. Архивировано из оригинала 2022-03-02 . Получено 2022-03-02 .
- ^ Карлос Варела и Гул Ага (2001). «Программирование динамически реконфигурируемых открытых систем с помощью SALSA». Уведомления ACM SIGPLAN. Труды OOPSLA'2001 Intriguing Technology Track . 36 .
- ^ Филипп Халлер и Мартин Одерски (сентябрь 2006 г.). «Программирование на основе событий без инверсии управления» (PDF) . Proc. JMLC 2006. Архивировано (PDF) из оригинала 2020-11-09 . Получено 2007-04-05 .
- ^ Филипп Халлер и Мартин Одерски (январь 2007 г.). «Акторы, объединяющие потоки и события» (PDF) . Технический отчет LAMP 2007. Архивировано из оригинала (PDF) 2011-06-07 . Получено 2007-12-10 .
- ^ "Swift Language Guide - Concurrency". Архивировано из оригинала 1 марта 2022 г. Получено 11 марта 2022 г.
- ^ "acteur - 0.9.1· Дэвид Бонет · Crates.io". crates.io. Архивировано из оригинала 2021-02-05 . Получено 2020-04-16 .
- ^ Булут, Махмут (2019-12-15). "Bastion on Crates.io". Crates.io . Архивировано из оригинала 2021-02-05 . Получено 2019-12-15 .
- ^ "actix - 0.10.0· Rob Ede · Crates.io". crates.io. Архивировано из оригинала 2021-05-14 . Получено 2021-02-28 .
- ^ "Releases · zakgof/actr · GitHub". Github.com. Архивировано из оригинала 2020-10-26 . Получено 2019-04-16 .
- ^ «Выпущена Akka 2.6.20 · Akka» . Акка. 06.09.2022. Архивировано из оригинала 24 сентября 2022 г. Проверено 24 сентября 2022 г.
- ^ "Часто задаваемые вопросы о лицензии Akka | @lightbend". Архивировано из оригинала 2022-09-22 . Получено 2022-09-24 .
- ^ Akka.NET v1.4.10 Stable Release GitHub - akkadotnet/akka.net: Порт актеров Akka для .NET., Akka.NET, 2020-10-01, заархивировано из оригинала 2021-02-24 , извлечено 2020-10-01
- ^ Апачи Пекко (выпускник), Apache Software Foundation
- ^ Шринивасан, Шрирам; Алан Майкрофт (2008). "Kilim: Isolation-Typed Actors for Java" (PDF) . Европейская конференция по объектно-ориентированному программированию ECOOP 2008 . Кипр. Архивировано (PDF) из оригинала 2020-10-28 . Получено 2016-02-25 .
- ^ "Releases · kilim/kilim · GitHub". Github.com. Архивировано из оригинала 2020-10-16 . Получено 2019-06-03 .
- ^ "История коммитов · stevedekorte/ActorKit · GitHub". Github.com . Получено 25.02.2016 .
- ^ "Hackage: The Haskell Package Repository". Hackage . Получено 1 мая 2024 г. .
- ^ "CloudI: Облако на самом низком уровне · Активность". sourceforge.net . Получено 2024-01-03 .
- ^ "Теги · GNOME/clutter · GitLab". gitlab.gnome.org. Архивировано из оригинала 2019-06-03 . Получено 2019-06-03 .
- ^ "Releases · ncthbrt/nact · GitHub". GitHub . Архивировано из оригинала 2020-11-27 . Получено 2019-06-03 .
- ^ "Изменения - retlang - Параллелизм на основе сообщений в .NET - Google Project Hosting". Архивировано из оригинала 2015-11-24 . Получено 2016-02-25 .
- ^ "jetlang-0.2.9-bin.zip - jetlang - jetlang-0.2.9-bin.zip - Параллелизм на основе сообщений для Java - Google Project Hosting". 2012-02-14. Архивировано из оригинала 2016-01-14 . Получено 2016-02-25 .
- ^ "GPars Releases". GitHub. Архивировано из оригинала 2020-09-04 . Получено 2016-02-25 .
- ^ "Releases · oosmos/oosmos · GitHub". GitHub. Архивировано из оригинала 2020-11-13 . Получено 2019-06-03 .
- ^ "Pulsar Design and Actors". Архивировано из оригинала 2015-07-04.
- ^ "Документация пульсара". Архивировано из оригинала 2013-07-26.
- ^ "Изменения – Документация Pykka 2.0.0". pykka.org. Архивировано из оригинала 2021-02-05 . Получено 2019-06-03 .
- ^ "Терон – Эштон Мейсон". Архивировано из оригинала 2019-03-31 . Получено 2018-08-29 .
- ^ "Theron - Выпущена версия 6.00.02". Theron-library.com. Архивировано из оригинала 2016-03-16 . Получено 2016-02-25 .
- ^ "Theron". Theron-library.com. Архивировано из оригинала 2016-03-04 . Получено 2016-02-25 .
- ^ "Releases · puniverse/quasar · GitHub". GitHub . Архивировано из оригинала 2020-12-15 . Получено 2019-06-03 .
- ^ "Изменения - Actor-cpp - Реализация модели акторов для C++ - Google Project Hosting". Архивировано из оригинала 2015-11-18 . Получено 2012-12-02 .
- ^ "История коммитов · s4/s4 · Apache". apache.org. Архивировано из оригинала 2016-03-06 . Получено 2016-01-16 .
- ^ "Releases · Actor-framework/actor-framework · GitHub". Github.com. Архивировано из оригинала 2021-03-26 . Получено 2020-03-07 .
- ^ "celluloid | RubyGems.org | your community gem host". RubyGems.org. Архивировано из оригинала 2020-09-29 . Получено 2019-06-03 .
- ^ "Сообщество: Actor Framework, LV 2011 revision (version 3.0.7)". Decibel.ni.com. 2011-09-23. Архивировано из оригинала 2016-10-13 . Получено 2016-02-25 .
- ^ "Выпуски · орбита/орбита · GitHub". GitHub . Получено 2019-06-03 .
- ^ "QP Real-Time Embedded Frameworks & Tools - Browse Files at". Sourceforge.net. Архивировано из оригинала 2021-02-24 . Получено 2019-06-03 .
- ^ "Releases · Stiffstream/sobjectizer · GitHub". GitHub. Архивировано из оригинала 2020-10-19 . Получено 2022-05-11 .
- ^ "Releases · basiliscos/cpp-rotor· GitHub". GitHub. Архивировано из оригинала 2020-09-15 . Получено 2022-05-17 .
- ^ "Releases · dotnet/orleans · GitHub". GitHub. Архивировано из оригинала 2020-12-04 . Получено 2022-09-21 .
- ^ "FunctionalJava releases". GitHub. Архивировано из оригинала 2021-01-15 . Получено 2018-08-23 .
Дальнейшее чтение
- Гул Ага. Актеры: Модель параллельных вычислений в распределенных системах. Архивировано 12 ноября 2020 г. в Wayback Machine . MIT Press 1985.
- Пол Баран. О распределенных сетях связи. Труды IEEE по системам связи . Март 1964 г.
- Уильям А. Вудс. Грамматики сетей переходов для анализа естественного языка Архивировано 03.02.2017 в Wayback Machine CACM. 1970.
- Карл Хьюитт. Процедурное внедрение знаний в планировщик. Архивировано 05.02.2021 в Wayback Machine IJCAI 1971.
- ГМ Бертвистл, Оле-Йохан Даль , Б. Мирхауг и Кристен Нюгаард . SIMULA Begin Auerbach Publishers Inc, 1973.
- Карл Хьюитт и др. Индукция акторов и метаоценка. Архивировано 15 ноября 2022 г. на конференции Wayback Machine. Запись симпозиума ACM по принципам языков программирования, январь 1974 г.
- Карл Хьюитт и др. Поведенческая семантика нерекурсивной структуры управления. Архивировано 10 июня 2018 г. в трудах Wayback Machine Colloque sur la Programmation, апрель 1974 г.
- Айрин Грейф и Карл Хьюитт. Семантика акторов PLANNER-73 Архивировано 05.02.2021 на конференции Wayback Machine. Запись симпозиума ACM по принципам языков программирования. Январь 1975 г.
- Карл Хьюитт. Как использовать то, что вы знаете . IJCAI. Сентябрь 1975 г.
- Алан Кей и Адель Голдберг. Руководство по эксплуатации Smalltalk-72 Xerox PARC Memo SSL-76-6. Май 1976 г.
- Эдсгер Дейкстра . Дисциплина программирования Prentice Hall. 1976.
- Карл Хьюитт и Генри Бейкер. Акторы и непрерывные функционалы. Труды рабочей конференции IFIP по формальному описанию концепций программирования. 1–5 августа 1977 г.
- Карл Хьюитт и Расс Аткинсон. Синхронизация в акторных системах . Труды 4-го симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования. 1977
- Карл Хьюитт и Расс Аткинсон. Спецификация и методы доказательства для сериализаторов. Журнал IEEE по программной инженерии. Январь 1979 г.
- Кен Кан. Вычислительная теория анимации. Архивировано 18 августа 2017 г. в Wayback Machine. Докторская диссертация MIT EECS. Август 1979 г.
- Карл Хьюитт, Беппе Аттарди и Генри Либерман. Делегация в материалах по передаче сообщений Первой международной конференции по распределенным системам Хантсвилл, Алабама. Октябрь 1979 г.
- Ниссим Франсез , К. А. Хоар, Дэниел Леманн и Виллем-Поль де Ровер. Семантика недетерминизма, параллелизма и коммуникации. Журнал компьютерных и системных наук. Декабрь 1979 г.
- Джордж Милн и Робин Милнер . Параллельные процессы и их синтаксис JACM. Апрель 1979 г.
- Дэниел Терио. Учебник по языку Акта 1. Записка 672 MIT AI. Апрель 1982 г.
- Дэниел Терио. Проблемы проектирования и реализации Акта 2. Архивировано 08.04.2019 в техническом отчете Wayback Machine MIT AI 728. Июнь 1983 г.
- Генри Либерман. Объектно-ориентированный симулятор для пчеловодческой конференции Американской ассоциации искусственного интеллекта, Вашингтон, округ Колумбия, август 1983 г.
- Карл Хьюитт и Питер де Йонг. Анализ ролей описаний и действий в открытых системах. Труды Национальной конференции по искусственному интеллекту. Август 1983 г.
- Карл Хьюитт и Генри Либерман. Вопросы проектирования параллельной архитектуры для искусственного интеллекта, MIT AI memo 750. Ноябрь 1983 г.
- CAR Hoare . Коммуникационные последовательные процессы. Архивировано 01.02.2021 в Wayback Machine Prentice Hall. 1985.
- Карл Хьюитт. Вызов открытых систем Байт. Апрель 1985 г. Перепечатано в книге «Основы искусственного интеллекта: справочник» Cambridge University Press. 1990 г.
- Карл Мэннинг. Путешественник: актерская обсерватория ECOOP 1987. Также появляется в Lecture Notes in Computer Science , т. 276.
- Уильям Атас и Чарльз Зейтц Мультикомпьютеры: параллельные компьютеры с передачей сообщений Архивировано 05.02.2021 в Wayback Machine IEEE Computer, август 1988 г.
- Уильям Атас и Нанетт Боден Кантор: Система программирования акторов для научных вычислений в трудах семинара NSF по объектно-ориентированному параллельному программированию. 1988. Специальный выпуск уведомлений SIGPLAN.
- Жан-Пьер Брио. От объектов к актерам: исследование ограниченного симбиоза в Smalltalk-80 Архивировано 25 ноября 2020 г. в Wayback Machine Rapport de Recherche 88–58, RXF-LITP, Париж, Франция, сентябрь 1988 г.
- Уильям Далли и Уиллс, Д. Универсальные механизмы параллелизма. Архивировано 18 июня 2018 г. на Wayback Machine PARLE 1989.
- W. Horwat, A. Chien и W. Dally. Опыт работы с CST: программирование и реализация Архивировано 14 мая 2021 г. в Wayback Machine } PLDI. 1989.
- Карл Хьюитт. На пути к семантике открытых информационных систем . Труды 10-го международного семинара по распределенному искусственному интеллекту. 23–27 октября 1990 г. Бандера, Техас.
- Акинори Ёнэдзава, редактор. ABCL: объектно-ориентированная параллельная система. Издательство MIT. 1990.
- К. Кан и Виджай А. Сарасват, «Акторы как частный случай параллельного ограничения (логического) программирования», в SIGPLAN Notices , октябрь 1990 г. Описывает Janus .
- Карл Хьюитт. Семантика открытых информационных систем . Журнал искусственного интеллекта. Январь 1991 г.
- Карл Хьюитт и Джефф Инман. DAI Betwixt and Between: от «интеллектуальных агентов» к науке об открытых системах. Труды IEEE по системам, человеку и кибернетике. Ноябрь/декабрь 1991 г.
- Карл Хьюитт и Гул Ага. Языки защищенных клаузул Хорна: являются ли они дедуктивными и логическими? Международная конференция по компьютерным системам пятого поколения, Омша 1988. Токио. Также в «Искусственный интеллект» в Массачусетском технологическом институте , том 2. MIT Press 1991.
- Уильям Далли и др. Процессор, управляемый сообщениями: многокомпьютерный узел обработки с эффективными механизмами. Архивировано 05.02.2021 в Wayback Machine IEEE Micro . Апрель 1992 г.
- S. Miriyala, G. Agha и Y. Sami. Визуализация программ акторов с использованием сетей переходов предикатов Архивировано 10 ноября 2020 г. в журнале Wayback Machine Journal of Visual Programming. 1992.
- Карл Хьюитт и Карл Мэннинг. Архитектура переговоров для управления крупномасштабными кризисами. Семинар AAAI-94 по моделям управления конфликтами при совместном решении проблем. Сиэтл, Вашингтон. 4 августа 1994 г.
- Карл Хьюитт и Карл Мэннинг. Синтетические инфраструктуры для многоагентных систем. Труды ICMAS '96. Киото, Япония. 8–13 декабря 1996 г.
- С. Фролунд. Координация распределенных объектов: основанный на актерах подход к синхронизации. MIT Press. Ноябрь 1996 г.
- W. Kim. ThAL: Система акторов для эффективных и масштабируемых параллельных вычислений. Архивировано 31 августа 2017 г. в диссертации Wayback Machine . Иллинойсский университет в Урбана-Шампейн. 1997.
- Жан-Пьер Брио. Acttalk: Фреймворк для объектно-ориентированного параллельного программирования — проектирование и опыт. 2-й франко-японский семинар. 1999.
- Н. Джамали, П. Тати и Г. Ага. Архитектура на основе акторов для настройки и управления ансамблями агентов. Архивировано 25 ноября 2020 г. в Wayback Machine IEEE Intelligent Systems. 14(2). 1999.
- Дон Бокс, Дэвид Энебуске, Гопал Какивая, Эндрю Лейман, Ноа Мендельсон, Хенрик Нильсен, Сатиш Татте, Дэйв Винер. Простой протокол доступа к объектам (SOAP) 1.1 Примечание W3C . Май 2000 г.
- М. Эстли, Д. Стурман и Г. Ага. Настраиваемое промежуточное программное обеспечение для модульного распределенного программного обеспечения Архивировано 31 августа 2017 г. в Wayback Machine CACM. 44(5) 2001.
- Эдвард Ли, С. Нойендорффер и М. Виртлин. Проектирование встроенных аппаратных и программных систем, ориентированное на актеров. Архивировано 20 октября 2016 г. в журнале Wayback Machine Journal of Circuits, Systems, and Computers . 2002.
- П. Тати, Р. Зиаеи и Г. Ага. Теория возможного тестирования акторов. Формальные методы для открытых объектно-ориентированных распределенных систем. Март 2002 г.
- P. Thati, R. Ziaei и G. Agha. Теория возможного тестирования асинхронных исчислений с локальностью и без сопоставления имен. Алгебраическая методология и технология программного обеспечения. Springer Verlag. Сентябрь 2002 г. LNCS 2422.
- Стивен Нойендорфер. Акторно-ориентированное метапрограммирование Архивировано 25.09.2020 в Wayback Machine PhD Thesis. Калифорнийский университет в Беркли. Декабрь 2004 г.
- Карл Хьюитт (2006a) Повторный упадок логического программирования и почему оно возродится. Что пошло не так и почему: уроки исследований и приложений ИИ. Технический отчет SS-06-08. AAAI Press. Март 2006 г.
- Карл Хьюитт (2006b) Что такое приверженность? Физическая, организационная и социальная Архивировано 11.02.2021 в Wayback Machine COIN@AAMAS. 27 апреля 2006b.
- Карл Хьюитт (2007a) Что такое приверженность? Физическая, организационная и социальная (пересмотренная) Пабло Норьега и др. редакторы. LNAI 4386. Springer-Verlag. 2007.
- Карл Хьюитт (2007b) Крупномасштабные организационные вычисления требуют нерасслоенной паранепротиворечивости и отражения. Архивировано 25 ноября 2020 г. на Wayback Machine COIN@AAMAS'07.
- D. Charousset, TC Schmidt, R. Hiesgen и M. Wählisch. Собственные акторы: масштабируемая программная платформа для распределенных, гетерогенных сред в AGERE! '13 Труды семинара 2013 года по программированию на основе акторов, агентов и децентрализованного управления.
Внешние ссылки
- Хьюитт, Мейер и Шиперски: Модель актера (все, что вы хотели знать, но боялись спросить) Microsoft Channel 9. 9 апреля 2012 г. Видео на YouTube
- Функциональная Java. Архивировано 09.07.2011 в Wayback Machine – библиотека Java, включающая реализацию параллельных акторов с примерами кода в стандартном стиле Java и Java 7 BGGA.
- ActorFoundry – библиотека на основе Java для программирования акторов. Знакомый синтаксис Java, файл сборки ant и куча примеров делают порог входа очень низким.
- ActiveJava – прототип расширения языка Java для программирования акторов.
- Akka – библиотека на основе акторов в Scala и Java от Lightbend Inc.
- GPars – библиотека параллелизма для Apache Groovy и Java
- Библиотека асинхронных агентов – библиотека акторов Microsoft для Visual C++. «Библиотека агентов – это библиотека шаблонов C++, которая продвигает модель программирования на основе акторов и внутрипроцессную передачу сообщений для крупнозернистых потоков данных и задач конвейеризации».
- ActorThread в C++11 – базовый шаблон, предоставляющий суть модели актора через голые потоки в стандарте C++11