Структурированный параллелизм
Структурированный параллелизм — это парадигма программирования, направленная на повышение ясности, качества и сокращения времени разработки компьютерной программы за счет использования структурированного подхода к параллельному программированию .
Основная концепция заключается в инкапсуляции параллельных потоков выполнения (здесь они включают в себя потоки и процессы ядра и пользовательской области) посредством конструкций потока управления, которые имеют четкие точки входа и выхода и которые гарантируют, что все порожденные потоки завершатся перед выходом. Такая инкапсуляция позволяет ошибкам в параллельных потоках распространяться в родительскую область структуры управления и управляться с помощью собственных механизмов обработки ошибок каждого конкретного компьютерного языка. Это позволяет потоку управления оставаться очевидным по структуре исходного кода, несмотря на наличие параллелизма. Чтобы быть эффективной, эта модель должна применяться последовательно на всех уровнях программы – в противном случае параллельные потоки могут утечь, стать бесхозными или не обеспечить правильное распространение ошибок времени выполнения.
Структурированный параллелизм аналогичен структурированному программированию , в котором используются конструкции потока управления, инкапсулирующие последовательные операторы и подпрограммы.
История [ править ]
Модель разветвления-объединения 1960-х годов, воплощенная в инструментах многопроцессорной обработки, таких как OpenMP , является ранним примером системы, гарантирующей завершение всех потоков перед завершением. Однако Смит утверждает, что эта модель не является истинно структурированным параллелизмом, поскольку язык программирования не знает о поведении соединения и, следовательно, не может обеспечить безопасность. [1]
Концепция была сформулирована в 2016 году Мартином Сустриком (разработчиком ZeroMQ ) с его библиотекой C libdill и горутинами в качестве отправной точки. [2] В 2017 году он был усовершенствован Натаниэлем Дж. Смитом, который представил «детский шаблон» в своей реализации Python под названием Trio. [3] Тем временем Роман Елизаров независимо пришел к тем же идеям при разработке экспериментальной библиотеки сопрограмм для языка Kotlin , [4] [5] которая позже стала стандартной библиотекой. [6]
В 2021 году Swift внедрил структурированный параллелизм. [7] Позже в том же году был опубликован проект предложения по добавлению структурированного параллелизма в Java . [8]
Вариации [ править ]
Основным отличием является то, как обрабатывается ошибка в одном элементе дерева параллельных потоков. Простые реализации будут просто ждать, пока дочерние и одноуровневые элементы сбойного потока не завершатся, прежде чем распространять ошибку в родительскую область. Однако это может занять неопределенное количество времени. Альтернативой является использование общего механизма отмены (обычно кооперативной схемы, позволяющей учитывать инварианты программы) для целесообразного завершения дочерних и одноуровневых потоков.
См. также [ править ]
Ссылки [ править ]
- ^ Смит, Натаниэль Дж. (25 апреля 2018 г.). «Заметки о структурированном параллелизме, или: оператор Go считается вредным» . Проверено 1 августа 2019 г.
- ^ Сюстрик, Мартин (7 февраля 2016 г.). «Структурированный параллелизм» . Проверено 1 августа 2019 г.
- ^ Смит, Натаниэль Дж. (10 марта 2017 г.). «Анонсирующее трио» . Проверено 23 сентября 2022 г.
- ^ Елизаров Роман (12 сентября 2018 г.). «Структурированный параллелизм» . Проверено 21 сентября 2019 г.
- ^ Елизаров Роман (11 июля 2019 г.). Структурированный параллелизм (Видео). Конференция Hydra по распределенным вычислениям. 42 минута . Проверено 21 сентября 2019 г.
Нам нужно было имя, и нам нужно было завершить всю эту концепцию [...] и мы наткнулись на этот пост в блоге [...] Натаниэля Дж. Смита.
- ^ «Основы сопрограмм: структурированный параллелизм» . Котлин . ДжетБрэйнс . Проверено 3 марта 2022 г.
- ^ МакКолл, Джон; Грофф, Джо; Грегор, Дуг; Малавский, Конрад. «Предложение по быстрому структурированному параллелизму» . Репозиторий Apple Swift Evolution . Гитхаб . Проверено 3 марта 2022 г.
- ^ Пресслер, Рон. «Проект JEP: Структурированный параллелизм (инкубатор)» . OpenJDK . Оракул . Проверено 3 марта 2022 г.
Внешние ссылки [ править ]
- Заметки о структурированном параллелизме, или: оператор Go, который Натаниэль Дж. Смит считает вредным
- Форум структурированного параллелизма , межкомпьютерное обсуждение структурированного параллелизма с участием Сюстрика, Смита и Елизарова.
- FOSDEM 2019: Structured Concurrency , краткий доклад Мартина Сустрика со ссылками на некоторые реализации