Способ выполнения нескольких задач, которые могут перекрываться во времени.
- Параллелизм: Задачи выполняются одновременно на разных ядрах процессора.
- Конкурентность: Задачи могут выполняться последовательно или вперемешку на одном ядре, при этом создается иллюзия одновременности.
В Python конкурентность часто реализуется с помощью:
- Потоков (Threads): Используются для ввода/вывода операций (сеть, дисковый ввод/вывод), где поток может "спать" во время ожидания, позволяя другому потоку работать. Из-за GIL (Global Interpreter Lock) потоки не обеспечивают истинный параллелизм для CPU-bound задач в стандартном CPython.
- Процессов (Processes): Используются для CPU-bound задач. Каждый процесс имеет свое независимое адресное пространство, обходит GIL и обеспечивает истинный параллелизм.
- Корутин (Coroutines) и Асинхронного программирования (asyncio): Легковесные задачи, которые кооперативно переключаются. Идеально подходят для высоконагруженных I/O-bound приложений.
| Механизм | Использование | Параллелизм (CPU-bound) | GIL (CPython) | Переключение | Затраты ресурсов |
|---|
| Потоки | I/O-bound | Нет (из-за GIL) | Влияет | Планировщиком ОС | Высокие |
| Процессы | CPU-bound, I/O-bound | Да | Обходится | Планировщиком ОС | Очень высокие |
| Корутины | I/O-bound, Высоконагр. | Нет | Не влияет | Явное (await) | Низкие |
python
python
python
Конкурентность позволяет эффективно использовать ресурсы, особенно при наличии операций ввода/вывода, избегая простоя процессора.