Блокирующий вызов блокирует поток до того момента, как будут-получены данные. Во время блокировки процесс не потребляет процессорное время, но потребляет память. Например, для выполнения запроса к БД из пула потоков берётся поток, далее он ожидает, пока БД выполнит запрос и вернёт результат.

Это одна из основных проблем императивного программирования. Если вычисление результата займёт 5 минут, то поток всё это время будет недоступен для других операций. Это может привести к снижению производительности сервиса, особенно если многие потоки будут блокироваться в ожидании завершения долго выполняющихся запросов к базе данных. В какой-то момент у вас просто могут закончиться потоки в пуле, и обработка новых запросов просто остановится.

Почему простаивание потока — это проблема?

Каждый поток нуждается в памяти для хранения своего стека вызовов и других связанных с ним структур данных. Когда поток простаивает, он продолжает потреблять ресурсы для поддержания своего состояния.

Кроме того, процессорное время, которое выделяется неработающим потокам, могло бы быть использовано для других задач. Если большое количество потоков простаивает, это может привести к увеличению загрузки процессора и снижению производительности, так как операционная система будет тратить больше времени на переключение между потоками.

Заметки

  • Чтение с диска в linux может быть только блокирующим.

Мета информация

Область:: 00 Архитектура ПО
Родитель::
Источник::
Автор::
Создана:: 2024-01-28

Дополнительные материалы

Дочерние заметки