Давайте посмотрим на то, что такое операция блокировки;
Я имитирую метод Sleep (), чтобы отложить печати Hello Star на 10 секунд.
requestHandlers.js
Кода -копия выглядит следующим образом:
функция start () {
console.log ("запрос обработчика" был вызван.
Функциональный сон (миллисекунд) {
var startTime = new Date (). getTime ();
while (new date (). gettime () <starttime + миллионы секунд);
}
сон (10000);
вернуть "Привет, старт";
}
function upload () {
console.log («обработчик запроса» был вызван загрузкой '. »);
вернуть "Привет, загрузка";
}
exports.start = start;
exports.upload = upload;
При запросе /запуска он задерживается на 10 секунд до печати.
При запросе/загрузке это не будет затронуто.
Далее, сделайте эксперимент:
Введите http: // localhost: 8888/start в адресной строке первого окна браузера, но не открывайте его в первую очередь!
Введите http: // localhost: 8888/загрузить в адресную строку второго окна браузера. Точно так же не открывайте его первым!
Мы нажимаем Enter в первом окне ("/start") и быстро переключаемся на второе окно ("/upload") и нажимаем Enter.
Обратите внимание, что случилось:
URL /Start URL занял 10 секунд, что было таким же, как и мы ожидали.
URL /загрузка на самом деле занял 10 секунд!
Но у него нет операции, аналогичной Sleep () в соответствующем обработчике запроса. В чем проблема?
Причина в том, что start () включает в себя операции блокировки. Честно говоря, «он блокирует все остальные работы по обработке».
Node.js однопоточный, и он может обрабатывать задачи параллельно без добавления дополнительных потоков.
Он реализует параллельные операции через петли событий, и мы должны в полной мере использовать это - вместо этого избегайте блокировки операций, вместо этого чаще используйте не блокирующие операции.
В следующем разделе мы представим, как реализовать неблокирующие операции.