Встречается на собеседованиях • сегодня

Почему не стоит использовать многопоточность в I/O bound задачах

В Python многопоточность неэффективна для I/O bound задач из-за GIL (Global Interpreter Lock), который позволяет выполняться только одному потоку за раз. Хотя потоки могут переключаться во время I/O операций (ожидание ответа от сети, диска и т.д.), GIL создаёт накладные расходы на переключение контекста.

Лучше использовать асинхронность (asyncio) или мультипроцессинг:

  • Asyncio идеален для I/O bound задач, т.к. использует кооперативную многозадачность без GIL.
  • Мультипроцессинг обходит GIL, но имеет большие накладные расходы на создание процессов.

Пример с asyncio:

python
import asyncio

async def fetch_data(url):
    # Асинхронный I/O (например, HTTP-запрос)
    await asyncio.sleep(1)  # Имитация I/O
    return f"Data from {url}"

async def main():
    tasks = [fetch_data(f"url_{i}") for i in range(3)]
    results = await asyncio.gather(*tasks)
    print(results)

asyncio.run(main())
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы