@Severovostok

Как разобраться в вопросе блокирующих/не блокирующих операций в Node.js?

Привет.

Никак не могу разобраться в вопросе блокирующих/не блокирующих операций.

Приведу пример (достаточно примитивный):

Допустим к node.js (express + socket.io) подключено 10 клиентов, 9 из которых уже прошли авторизацию, которая представляет собой блокирующую операцию, значит ли это, что на момент прохождения авторизации 10-м клиентом (блокирующая операция), 9 оставшихся также будут ожидать завершения его авторизации (10-го) или эта блокировка касается только конкретного 10-го пользователя?

Вопрос может показаться глупым, но я мыслю по привычной связке php-apache, где все это уже решено.
Есть ли какая-то подробная статья (можно на английском) или книга?

Спасибо.
  • Вопрос задан
  • 3742 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
В node.js (стоковом, если мы не говорим о тредах или процессах) одновременно может выполняться только одна операция. Правда есть нюансы. Ваша авторизация врят-ли будет полностью блокирующей. Вы лазаете в базу - в node.js насколько я помню это неблокирующая операция (ну... все чуть сложнее но все же как-то так), и пока запрос идет в базу, может делаться что-то другое.

Но если вдруг у вас на самом деле если какая-то бездумная операция, которая блокирует весь процесс, ничего больше обрабатываться не будет пока не закончится операция. Ни обрабатываться новые соединения, и старые... вообще ничего. Проблемы это будет создавать если у вас операции блокирующие длятся больше десятых долей милисекунды. То есть обычно все отрабатывает очень быстро, а все медленное (обращение к файловой системе, к базе данных) нужно стараться делать асинхронно, что бы во время ожидание можно было что-то еще поделать процессу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы