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

В чем разница между блокирующим и неблокирующим ввод-выводом

Блокирующий I/O приостанавливает выполнение программы до завершения операции (например, чтение файла или сетевого запроса). Неблокирующий I/O позволяет программе продолжать работу, а результат операции обрабатывается асинхронно.

Пример блокирующего кода:

python
with open('file.txt', 'r') as f:
    data = f.read()  # Программа ждет здесь
print(data)

Пример неблокирующего кода с asyncio:

python
import asyncio

async def read_file():
    with open('file.txt', 'r') as f:
        data = await loop.run_in_executor(None, f.read)
    print(data)

loop = asyncio.get_event_loop()
loop.run_until_complete(read_file())

Ключевые отличия:

  1. Блокирующий I/O прост в реализации, но неэффективен для множества операций
  2. Неблокирующий требует более сложной архитектуры (event loop, коллбэки), но масштабируется лучше
  3. В Python для неблокирующего I/O используют asyncio, threading или multiprocessing
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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