Структурированный параллелизм - Structured concurrency

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

Основная концепция - это инкапсуляция параллельных потоков выполнения (в данном случае это включает в себя потоки и процессы ядра и пользователя) с помощью конструкций потока управления, которые имеют четкие точки входа и выхода и гарантируют, что все порожденные потоки завершатся до выхода. Такая инкапсуляция позволяет распространять ошибки в параллельных потоках на родительскую область структуры управления и управлять ими с помощью собственных механизмов обработки ошибок каждого конкретного компьютерного языка. Это позволяет потоку управления оставаться очевидным по структуре исходного кода, несмотря на наличие параллелизма. Чтобы быть эффективной, эта модель должна применяться согласованно на всех уровнях программы - в противном случае параллельные потоки могут просочиться, стать потерянными или не смогут правильно распространять ошибки времени выполнения.

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

История

Модель fork-join из 1960-х годов, воплощенная в многопроцессорных инструментах, таких как OpenMP , является ранним примером системы, обеспечивающей завершение всех потоков до выхода. Однако Смит утверждает, что эта модель не является истинным структурированным параллелизмом, поскольку язык программирования не знает о поведении соединения и, таким образом, не может обеспечить безопасность.

Концепция была разработана в 2016 году Мартин Sústrik (создатель ZeroMQ ) с его библиотекой C libdill с goroutines в качестве отправной точки. В 2018 году он был доработан Натаниэлем Дж. Смитом, который представил «детский шаблон» в своей реализации Python под названием Trio. Между тем, Роман Елизаров независимо друг от друга пришел к этим идеям при разработке экспериментальной библиотеки сопрограмм для языка Kotlin .

В 2019 году проект ткацкого станка от OpenJDK принимает структурированный параллелизм, чтобы перенести его на платформу Java в следующем выпуске в рамках более широкой работы над облегченными потоками и сопрограммами .

В 2021 году Swift принял структурированный параллелизм.

Вариации

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

Смотрите также

Рекомендации

Цитаты

Внешние ссылки