Сравнение многопоточных моделей в Julia> = 1,3 и Python 3. X - PullRequest
2 голосов
/ 20 января 2020

Я хотел бы понять, с точки зрения пользователя, различия в многопоточных моделях программирования между Юлией> = 1,3 и Python 3.

Есть ли одна, которая более эффективна, чем другая ( в том смысле, что увеличение числа потоков сокращает время вычислений)? В каких ситуациях (например, одна модель может иметь преимущество, но только для вычислительных задач или задач, требующих большого объема памяти)?

Является ли модель более практичной / обеспечивающей функции более высокого уровня, чем другая?

один, который является более гибким, чем другой (например, он может быть применен к более широкому набору случаев)?

1 Ответ

3 голосов
/ 20 января 2020

Существует несколько различий между языками, в которых Julia предоставляет множество уровней функциональности, которые вы можете найти в Python. У вас есть следующие типы параллелизма (я обсуждаю здесь стандартные функции языка, а не функции, доступные через внешние библиотеки):

  1. SIMD (signle-инструкция-множественные данные) для процессоров

  2. Зеленые нити (также называемые сопрограммами). (Это не фактическая многопоточность, но позволяет использовать один системный поток для множества задач. Это особенно полезно для распараллеливания операций ввода-вывода, таких как очистка веб-страниц или межпроцессное взаимодействие - например, если одна задача ожидает ввода-вывода, другая задача может выполняться параллельно.)

  3. Многопоточность: параллельное выполнение нескольких задач в рамках одного процесса (и общей памяти) в нескольких системных потоках:

    • Юлия: используйте макрос Threads.@threads для распараллеливания циклов и Threads.@spawn для запуска задач в отдельных системных потоках. Используйте блокировки или значения Atomi c для управления параллельным выполнением. (подробнее см. https://docs.julialang.org/en/v1/manual/parallel-computing/)

    • Python: не поддерживается из-за GIL (глобальная блокировка интерпретатора)

  4. Мульти-обработка

...