Кроме того факта, что Erlang был специально разработан для одновременной / параллельной / распределенной ситуаций, две основные технологии, которые он использует, делают это возможным:
Нет побочных эффектов:
Это означает, что когда вы даете функции часть данных для выполнения, она не будет влиять, кроме как в очень строгих случаях, на что-либо другое в системном / запущенном процессе. Это означает, что если вы одновременно выполняете функцию 300 раз одновременно, ни одно из этих 300 выполнений функции не повлияет ни на одно из других.
Техника реализации, обеспечивающая отсутствие побочных эффектов, называется «неизменяемостью», что примерно означает, что ее нельзя изменять (изменять). Это означает, что как только вы создадите переменную, значение этой переменной не может быть изменено. Erlang реализует это поведение с помощью «одиночного присваивания», поэтому после того, как вы присвоите значение переменной, вы не сможете присвоить ей значение снова.
X = 1.
X = 2. // This is not a valid operation
Это гарантирует, что ни один код не может случайно изменить значение X, вызывая состояние гонки, поэтому он по своей природе ориентирован на многопоточность и одновременное использование становится тривиальным. Это очень необычное поведение среди языков программного обеспечения и самый лучший способ, которым Erlang удается так хорошо подходить для одновременного выполнения.
Актерская модель:
Это особый способ моделирования, который показал, что реализация и управление параллельной обработкой очень просты для разработчиков. Прямо из Википедии (http://en.wikipedia.org/wiki/Actor_model):
Модель Актер принимает философию, что все является актером. Это похоже на все, что является объектной философией, используемой некоторыми объектно-ориентированными языками программирования, но отличается тем, что объектно-ориентированное программное обеспечение обычно выполняется последовательно, в то время как модель Actor по своей сути является параллельной. Действующий субъект - это вычислительная сущность, которая в ответ на полученное сообщение может одновременно: отправлять конечное число сообщений другим субъектам; создать конечное число новых актеров; обозначить поведение, которое будет использоваться для следующего полученного сообщения. Предполагаемая последовательность действий выше не предусмотрена, и они могут выполняться параллельно. Отключение отправителя от отправленных сообщений стало фундаментальным достижением модели Actor, обеспечивающей асинхронные структуры связи и управления в качестве шаблонов передачи сообщений.