diff --git a/dev/architecture/Блокирующий вызов.md b/dev/architecture/Блокирующий вызов.md new file mode 100644 index 00000000..300b489d --- /dev/null +++ b/dev/architecture/Блокирующий вызов.md @@ -0,0 +1,44 @@ +--- +aliases: + - блокирующие операции + - блокирующая операция + - блокирующий вызов + - блокирующий ввод-вывод + - блокирующего +tags: + - maturity/🌱 +date: + - - 2024-01-28 +zero-link: + - "[[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]" +parents: +linked: + - "[[Бэкенд большую часть времени ждет]]" +--- +Блокирующий вызов блокирует [поток](../fundamental/Поток%20процесса%20ОС.md) до того момента, как будут-получены данные. Во время блокировки [процесс](../fundamental/Процесс%20ОС.md) не потребляет процессорное время, но потребляет память. Например, для выполнения запроса к БД из пула потоков берётся поток, далее он ожидает, пока БД выполнит запрос и вернёт результат. + +Это одна из основных проблем императивного программирования. ==Если вычисление результата займёт 5 минут, то поток всё это время будет недоступен для других операций.== Это может привести к снижению производительности сервиса, особенно если многие потоки будут блокироваться в ожидании завершения долго выполняющихся запросов к базе данных. В какой-то момент у вас просто могут закончиться потоки в пуле, и обработка новых запросов просто остановится. + +![](../../meta/files/images/Pasted%20image%2020240319200211.png) + +## Почему простаивание потока — это проблема? +Каждый поток нуждается в памяти для хранения своего стека вызовов и других связанных с ним структур данных. ==Когда поток простаивает, он продолжает потреблять ресурсы для поддержания своего состояния.== + +Кроме того, процессорное время, которое выделяется неработающим потокам, могло бы быть использовано для других задач. Если большое количество потоков простаивает, это может привести к увеличению загрузки процессора и снижению производительности, так как операционная система будет тратить больше времени на переключение между потоками. +## Заметки +- Чтение с диска в linux может быть только блокирующим. +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]] +**Родитель**:: +**Источник**:: +**Автор**:: +**Создана**:: [[2024-01-28]] +### Дополнительные материалы +- [[../../../../_inbox/Бэкенд большую часть времени ждет|Бэкенд большую часть времени ждет]] +### Дочерние заметки +```dataview +LIST +FROM [[]] +WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) +``` \ No newline at end of file diff --git a/index.md b/index.md index ee7830f6..5f5603f0 100644 --- a/index.md +++ b/index.md @@ -58,6 +58,7 @@ enableToc: false - Сборщики - [[meta/zero/00 Maven|00 Maven]] - [[meta/zero/00 Gradle|00 Gradle]] + - [[meta/zero/00 Linux|Linux]] - [Сети](meta/zero/00%20Сети.md) - [Алгоритмы](meta/zero/00%20Алгоритм.md) - [Snippets](meta/zero/00%20Snippets.md) diff --git a/meta/files/images/Pasted image 20240319200211.png b/meta/files/images/Pasted image 20240319200211.png new file mode 100644 index 00000000..4672a09c Binary files /dev/null and b/meta/files/images/Pasted image 20240319200211.png differ