Что такое функция блокировки? - PullRequest
9 голосов
/ 13 сентября 2011

Что такое функция блокировки или вызов блокировки ?

Это термин, который я вижу снова и снова, когда ссылаюсь на Node.js или языки обработки в реальном времени.

Ответы [ 3 ]

15 голосов
/ 13 сентября 2011

Функция, которая останавливает выполнение скрипта до его завершения.

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

fwrite(file, "Contents");
print("Wrote to file!");

Оператор print будет выполнен только после записи файла на диск. Вся программа остановлена ​​ по этой инструкции. Это не заметно для достаточно маленьких записей, но представьте, что у меня был огромный двоичный объект для записи в файл, который занял много секунд:

fwrite(file, blob);
print("Wrote to file!");

Оператор print будет выполнен только после нескольких секунд записи, и вся программа будет остановлена ​​на это время. В Node.js все это выполняется асинхронно с использованием событий и обратных вызовов . Наш пример станет:

fwrite(file, blob, function() {
    print("Wrote to file!");
});
print("Do other stuff");

Где третий параметр - это функция, которая вызывается после записи файла. Оператор print, расположенный после функции записи, будет вызван сразу после того, был ли файл записан или нет. Поэтому, если бы мы написали достаточно большой BLOB-объект, результат мог бы выглядеть следующим образом:

Do other stuff
Wrote to file!

Это делает приложения очень быстрыми , потому что вы не ожидаете сообщения клиента, записи файла или чего-то другого. Вы можете продолжать обрабатывать данные параллельно. Это считается многими из сильных сторон Node.js.

2 голосов
/ 13 сентября 2011
var block = function _block() {
  while(true) {
    readInputs();
    compute();
    drawToScreen();
  }
}

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

Другие функции блокировки будут ожидать ввода-вывода

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

Это в основном разница между бездействием потока и сном.

0 голосов
/ 13 сентября 2011

Блокирующий вызов - это вызов, который не позволяет продолжить обработку до тех пор, пока он не вернется в вызывающий поток - это также называется синхронным вызовом.Асинхронный, с другой стороны, означает, что потоки (и код) могут выполняться одновременно (одновременно).

...