Назад к вопросам
Middle
67
questionbank

Что такое параллелизм?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Параллелизм — это способность системы выполнять несколько задач одновременно или кажущимся одновременно. В Python это достигается с помощью модулей threading и multiprocessing.

Ключевые аспекты:

  • Одновременное выполнение: Задачи выполняются в одно и то же время (в случае многопроцессности на многоядерных процессорах) или выполняются переключения между задачами настолько быстро, что создается иллюзия одновременности (в случае многопоточности).
  • GIL (Global Interpreter Lock): В CPython GIL ограничивает фактическое параллельное выполнение потоков, использующих CPU-связанные операции. Для таких задач лучше использовать многопроцессность.
  • Сценарии использования: Параллелизм полезен для задач, связанных с вводом/выводом (сеть, файловая система), где потоки могут ожидать завершения операций, и для CPU-связанных задач (вычисления), где процессы могут выполняться на разных ядрах.

Многопоточность (Threading):

Потоки разделяют одно и то же адресное пространство памяти.

import threading
import time

def worker(num):
    """Thread worker function"""
    print(f'Worker: {num}')
    time.sleep(1)

threads = []
for i in range(5):
    t = threading.Thread(target=worker, args=(i,)) // Создание потока
    threads.append(t)
    t.start() // Запуск потока

for t in threads:
    t.join() // Ожидание завершения потока

print('All threads finished.')

Многопроцессность (Multiprocessing):

Процессы имеют отдельное адресное пространство памяти.

import multiprocessing
import time

def worker(num):
    """Process worker function"""
    print(f'Worker: {num}')
    time.sleep(1)

processes = []
for i in range(5):
    p = multiprocessing.Process(target=worker, args=(i,)) // Создание процесса
    processes.append(p)
    p.start() // Запуск процесса

for p in processes:
    p.join() // Ожидание завершения процесса

print('All processes finished.')

Различия между многопоточностью и многопроцессностью:

Признак Многопоточность (Threading) Многопроцессность (Multiprocessing)
Адресное пространство Общее Отдельное
GIL Влияет на CPU-связанные задачи в CPython Не влияет, так как каждый процесс имеет свой GIL
Создание Быстрее Медленнее (создание нового процесса)
Общение Через общие переменные (требуется синхронизация) Через очереди, пайпы, менеджеры (более безопасно)