Поскольку ваш sleep
блокирует цикл обработки событий.
Замените его на setTimemout(function() { /* Code to run */ }, 5000);
и наблюдайте за немедленным ответом /2
.
Фактический ввод / вывод асинхронный, но вседействия, которые вы выполняете над вводом / выводом, происходят в цикле событий.Если что-то блокирует цикл обработки событий, все остальное должно ждать, как вы сказали.
РЕДАКТИРОВАТЬ.Для большей ясности взгляните на следующий рисунок ASCII:
Event Loop Thread: ------+req1HandlerExistsCall+-------+req1Wait5Sec++++++++++++++++++++++++++req2ExistsCall+-------+req2Immediate+-------------
HTTP I/O: -+req1+--------------------------------------+req2+--------------------------------------+req1Response+--------+req2Response+
File I/O: ----------------------------+exists1+----------------------------------------------------+exists2+---------------------------
По сути, только по одному для каждого потока.Поскольку первый обработчик запросов блокируется на 5 секунд (и по существу невозможно обойти вашу файловую систему пальцами в тесте скорости), второй ответ даже не начинает обрабатываться до тех пор, пока первый запрос почти не будет выполнен.