Многопоточность · Multithreading

BackendЧастота употребления: очень высокая· Сложность: 3/5· Актуальность: 5/5· Тренд: стабильно

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

Подробно

Многопоточность — модель конкурентного выполнения, при которой в рамках одного процесса создаётся несколько потоков, разделяющих общую память и ресурсы. Она позволяет перекрывать время ожидания ввода-вывода вычислительной работой и утилизировать многоядерные процессоры, что критично для серверов и нагруженных приложений. В отличие от многопроцессности, потоки дешевле в создании, но требуют синхронизации: без мьютексов, семафоров и атомарных операций возникают гонки данных (race conditions) и взаимные блокировки. Языки и платформы решают это по-разному: в Java — java.util.concurrent и виртуальные потоки (Project Loom), в Python — GIL ограничивает параллелизм CPU-задач, поэтому применяют multiprocessing или asyncio, в C++ — std::thread и std::async. Применяется в веб-серверах, обработке потоков данных, игровых движках и фоновых воркерах.

Примеры употребления

  • Python: `with ThreadPoolExecutor(max_workers=8) as ex: ex.map(fetch, urls)` — параллельная загрузка URL
  • Java: `ExecutorService pool = Executors.newFixedThreadPool(4); pool.submit(task);`
  • GIL в CPython ограничивает многопоточность вычислений: для CPU-bound задач используют multiprocessing
  • Java: `Executors.newVirtualThreadPerTaskExecutor()` для миллионов лёгких потоков
#concurrency #threads #parallelism #performance

Источники