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

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

Концепция была сформулирована в 2016 году Мартином Сустриком (создателем ZeroMQ ),[1] а затем доработан в 2018 году Натаниэлем Дж. Смитом, который реализовал его в Трио.[2] Между тем, Роман Елизаров независимо пришел к этим идеям при разработке экспериментальной библиотеки сопрограмм для языка Kotlin.[3][4]

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

В 2020 г. Быстрый упоминает внедрение структурированного параллелизма в своей дорожной карте параллелизма.[6]

Вариации

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

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

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

Цитаты

  1. ^ Сустрик, Мартин (7 февраля 2016 г.). «Структурированный параллелизм». Получено 1 августа 2019.
  2. ^ Смит, Натаниэль Дж. (25 апреля 2018 г.). «Примечания о структурированном параллелизме или: инструкция Go считается вредной». Получено 1 августа 2019.
  3. ^ Елизаров, Роман (12 сентября 2018). «Структурированный параллелизм». Получено 21 сентября 2019.
  4. ^ Елизаров, Роман (июль 2019). Структурированный параллелизм (Видеозапись). Конференция по распределенным вычислениям Hydra. 42 минут в. Получено 21 сентября 2019. Нам нужно было имя, и нам нужно было завершить всю эту концепцию [...], и мы наткнулись на эту запись в блоге [...] Натаниэля Дж. Смита.
  5. ^ Бейтман, Алан. «Структурированный параллелизм». openjdk.java.net. OpenJDK. Получено 23 ноября, 2019.
  6. ^ Коэн, Бен. «Дорожная карта Swift Concurrency». swift.org. Быстрый. Получено 31 октября, 2020.

внешняя ссылка