В этой статье мы постараемся подробно проиллюстрировать разницу между блокирующими и неблокирующими вызовами в Nodejs. Этот блог будет относиться к циклу событий и libuv.

БЛОКИРОВКА И НЕБЛОКИРОВКА В NODEJS

Блокирующая или неблокирующая операционная модель - это процесс, который имеет дело с операциями ввода / вывода.

Чтение из источника или запись в ресурс считается операцией ввода-вывода. «Ввод-вывод» относится к взаимодействию с системным диском и сетью, поддерживаемым модулем libuv.

С другой стороны, оперативная память (RAM) имеет возможность доступа к файлам из любого места за один и тот же промежуток времени, независимо от его физического расположения. Эта память может быть обработана быстро и не требует ожидания. Таким образом, доступ к памяти не считается операцией ввода-вывода.

Наиболее частыми задачами, выполняемыми большинством разработчиков, являются файловый ввод-вывод, этот фундаментальный процесс состоит из трех процессов:

  • Откройте файл.
  • Прочтите его содержание и распечатайте.
  • Выполнение чего-либо.

БЛОКИРОВКА

Термин «Блокировка» изначально возник из модели процесса операционной системы. На самом деле это многозадачная операционная система, каждый из которых помечен как процесс со своим состоянием, зависящим от того, насколько эти процессы должны быть помещены в ЦП для выполнения.

Когда выполнение JavaScript в процессе Nodejs должно ждать завершения операции, отличной от JavaScript, это называется блокировкой.

Процесс помечается как заблокированный, если он не готов к выполнению. Так что он будет ждать, пока произойдет событие. Каждое событие ввода / вывода указывает либо прогресс, либо завершение операции ввода / вывода.

Выполнение системного вызова блокировки переводит весь процесс в заблокированное состояние.

Давайте посмотрим, как это можно сделать с помощью кода блокировки в Nodejs:

Здесь мы пытаемся читать простые файлы: хосты и пользователи и распечатывать их содержимое, одновременно распечатывая несколько приветственных сообщений.

БЛОКИРОВКА / СИНХРОННЫЙ КОД:

Содержимое файла hosts:

190.158.0.1
173.0.1.1
205.250.255.0

Содержимое файла пользователей:

paul
smith
dog
Snake
var fs = require('fs');
 var contents = fs.readFileSync('users','utf8');
 console.log(contents);
 console.log("Welcome Node\n");
 var contents = fs.readFileSync('hosts','utf8');
 console.log(contents);
 console.log(“Welcome again!”);

Давайте посмотрим, как выглядит блокирующий / синхронный код здесь:

paul
smith
dog
Snake
Welcome Node
190.158.0.1
173.0.1.1
205.250.255.0
Welcome again!

Относительно выходного кода мы можем узнать о некоторых основных моментах:

  • Это код блокировки
  • Мы видим содержимое пользовательского файла, «узел приветствия» решительно поддерживает вышеуказанный пункт.
  • То же происходит и со следующим файлом.

НЕ БЛОКИРОВКА

Неблокирующая операция в Node js не ожидает завершения ввода-вывода. Всякий раз, когда в процессе происходит операция блокировки, все остальные операции приостанавливаются на уровне операционной системы. Выполняя такую ​​неблокирующую операцию ввода-вывода, процесс продолжает выполняться в неблокирующем механизме.

Неблокирующий вызов инициирует операцию и оставляет ее для немедленного завершения ОС без каких-либо результатов.

Давайте посмотрим, как это можно сделать с помощью неблокирующего кода в Nodejs:

Здесь мы пытаемся читать простые файлы: хосты и пользователи и распечатывать их содержимое, одновременно распечатывая несколько приветственных сообщений.

Прочтите: Что такое функция обратного вызова в Node.js?

БЕЗБЛОКИРОВКА / АСИНХРОННЫЙ КОД:

Содержание файла хоста:

190.158.0.1
173.0.1.1
205.250.255.0

Содержимое файла пользователей:

paul
smith
dog
Snake
var fs = require('fs');
var contents = fs.readFile('./users','utf8', function(err,contents){
   console.log(contents);
});
console.log("Welcome Node\n");
 var contents = fs.readFile('./hosts','utf8', function(err,contents){
   console.log(contents);
});
console/log(“Welcome again”);

Давайте посмотрим здесь на вывод для неблокирующего или асинхронного кода:

Welcome Node
Welcome again!
paul
smith
dog
Snake
190.158.0.1
173.0.1.1
205.250.255.0

Сравнивая с предыдущим выводом кода синхронизации, мы можем заключить следующие моменты с помощью асинхронного кода:

  • Выполненные выше коды показывают неблокирующий вывод

ВЫВОД

Мы надеемся, что этот блог вам очень помог. Все еще запутались в процессе? Пожалуйста, Свяжитесь с нашими экспертами по Nodejs для получения более подробной информации о процессе разработки.