Ответ Theon дает хороший современный обзор. Я хотел бы добавить историческую перспективу.
Тони Хоар и Роберт Милнер разработали математическую алгебру для анализа параллельных систем (передача последовательных процессов, CSP и коммуникационных параллельных систем, CCS). Оба они выглядят как тяжелая математика для большинства из нас, но практическое применение является относительно простым. CSP привел непосредственно к языку программирования Occam среди других, причем Go является самым новым примером. CCS привел к исчислению Pi и мобильности контактирующих каналов, функции, которая является частью Go и была добавлена в Occam за последнее десятилетие или около того.
CSP моделирует параллелизм только путем рассмотрения автоматических объектов («процессы», v.легкие вещи, такие как зеленые потоки), взаимодействующие просто путем обмена событиями. Среда для прохождения событий идет по каналам. Процессам, возможно, придется иметь дело с несколькими входами или выходами, и они делают это, выбирая сначала готовое событие. События обычно переносят данные от отправителя к получателю.
Принципиальная особенность модели CSP заключается в том, что пара процессов взаимодействует только тогда, когда они готовы - на практике это приводит к тому, что обычно называют синхронной связью. Тем не менее, фактические реализации (Go, Occam, Akka) позволяют буферизовать каналы (нормальное состояние в Akka), так что вместо этого блокировка обмена событиями фактически развязывается.
Таким образом, управляемая событиями система на основе CSP - это действительно потоковая сеть процессов, связанных каналами.
Помимо интерпретации событий CSP, связанных с событиями, были и другие. Важным примером является подход «event-wheel», когда-то популярный для моделирования параллельных систем, в то время как фактически имел единственный поток обработки. Такие системы обрабатывают события, помещая их в очередь обработки и обрабатывая их должным образом, обычно посредством обратного вызова. Хорошим примером является механизм обработки событий Java Swing. Были и другие, например. для механизмов моделирования на основе времени. Можно подумать о модели Javascript/NodeJS как подходящей для этой категории.
Таким образом, колесо событий было способом выражения параллелизма, но без параллелизма.
Ирония заключается в том, что два подхода, которые я описал выше, описаны как события, но то, что они подразумевают под действием события, различно в каждом случае. В одном случае аппаратные элементы соединены вместе; в другом, почти все действия выполняются обратными вызовами. Подход CSP утверждает, что он масштабируется, потому что он полностью сложен; это, естественно, адепт при параллельном исполнении. Если есть какие-то причины одобрить друг друга, это, вероятно, это.
-1. Что вы делали/читали до сих пор, чтобы понять, что такое параллелизм с событиями? Google должен по крайней мере помочь вам в этом. Первые три хита для меня: http://berb.github.io/diploma-thesis/original/055_events.html, https://www.youtube.com/watch?v=2gcrTsQ7yi4, https: // ru. wikipedia.org/wiki/Event-driven_programming. –