Первые попытки одновременного выполнения задач на компьютере относятся к 1961 году. Именно тогда Том Килберн и Дэвид Ховарт смоделировали параллельное выполнение нескольких программ на компьютере Atlas. Этот метод программирования на основе прерываний стал известен как мультипрограммирование.

Сначала техника не опиралась на прочную теоретическую основу. Выполнение параллельных задач было относительно неконтролируемым.

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

Растущая ненадежность многопрограммных операционных систем побудила ученых-компьютерщиков углубиться в параллельное программирование и установить недостающие правила.

Первые подробные работы по концептуальной основе параллельного программирования появились после середины 60-х годов. Одним из самых влиятельных участников был Эдсгер Дейкстра, который определил и решил проблему взаимного исключения. Он представил концепцию семафоров для управления доступом к общим ресурсам в параллельных системах.

Я также должен упомянуть Тони Хоара и Пера Бринча Хансена, чья работа была неоценима в области параллельного программирования.

Исследователи по всему миру начали реализовывать идеи, представленные в этих рекомендациях, на экспериментальных языках. Основываясь на своих результатах, авторы дополнительно усовершенствовали принципы. Результат этого итеративного процесса лежит в основе современного параллельного программирования.

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

Теперь добавление новых правил в язык программирования — непростая задача. Новые правила, то есть их синтаксис и семантика — их значение в этом контексте — должны быть точно определены, чтобы они были понятны программисту. В конце концов, именно они используют новые возможности языка. Если синтаксис или семантика неясны, вся концепция неэффективна и, в худшем случае, бесполезна.

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