Причины использования асинхронных API
Причина, по которой концепция асинхронного стала популярной в Web2.0, заключается в том, что JavaScript выполняется на одном потоке в браузере, а также использует поток с рендерингом пользовательского интерфейса. Это означает, что рендеринг пользовательского интерфейса и ответы находятся в застойном состоянии, когда JavaScript выполняется. Для лучшего пользовательского опыта, асинхронный подход (конечно, это на так называемом однопоточном языке) не блокирует основной поток и продолжает реагировать на операции пользователей. Это принадлежит категории пользовательского опыта.
Точно так же, если инженеры с опытом в других языках, конечно, понимают, что переключение процессора между потоками требует много времени (в основном переключение между контекстами и кэшированием), поэтому повышение эффективности также является причиной для использования асинхронных API.
Конечно, это не совсем правильно, но все так говорят. Потому что, если накладные расходы на создание многопоточных чтений не менее параллельно выполнение, то метод многопоточного чтения является первым выбором, который часто считается задачей обработки, интенсивной процессором.
Короче говоря, асинхронный IO или асинхронный API можно рассматривать как особенность узла, потому что это платформа, которая применяет асинхронную IO на слое приложения в больших масштабах, и она стремится более эффективно выделять ресурсы на одну потоку.
О обещании
Здесь эта статья не намерена подробно объяснять использование обещания, но лишь кратко объясняет некоторые API и пробные масштабы обещания:
// Объединение функции nodejs 'fs.readdir для создания нативного обещания respervar romisetask = new Orders (function (Resolve, doject) {fs.readdir ('/var/www ', function (err, files) {if (! Err) {resolve (files);} else {rece (err);});}); console.log ('Содержимое:'+files); romisetask.catch (function (err) {console.log ('Ошибка сообщается как:'+err);});Как дождаться выполнения нескольких обещаний?
// Подключить вышеуказанный romisetask.then (function (files) {var readfilsepromiselist = files.map (function (file, index) {return new Promise (function (resolve, doject) {fs.readfile (file, 'utf-8', function (err, str) {if (! Err) {resolve (str)}}} {re-reject); Rape.all (readfilsepromiselist);}). Тогда (function (fileStrarray) {console.log ('так называемое чтение файла завершено:'+fileStrarray);});Этот код показывает элегантность разработки Nodejs.
Так в чем же проблема?
Наиболее элегантный язык в настоящее время по -прежнему зависит от операционной системы, то есть ограничения системы все еще существуют:
Я не знаю, можно ли интерпретировать эту ошибку как исчерпанные ручки работы файла, но я надеюсь, что вы сможете понять эту статью, что операционная система не может открыть неограниченные несколько файлов одновременно.
И это:
Это легко понять, и память истощена. Конечно, предел памяти может быть скорректирован, добавив следующие два параметра запуска:
Узел-max old-size = 8192 ./index.js #unit mb node-max-new-space-size = 2048 ./index.js #unit kb
Приведенные выше параметры вступают в силу, когда V8 инициализируется и не может быть изменено динамически, как только они вступят в силу.
Многие люди могут предложить, чтобы эти два ограничения были также на других языках. Да, другие языки существуют.
Однако мощные модели программирования GC или многопоточного программирования на других языках могут позволить инженерам выпустить их вовремя после подачи заявления на системные ресурсы.
Хотя ненужные системные ресурсы могут быть выпущены вручную в Nodejs, может ли каждая операция в справочной программе будет выпущена вовремя?
Например, пакет Nodejs Redis (NPM Install Redis) не предоставляет методы работы синхронизации.
Это означает, что в процессе разработки необходимо больше контроля процессов. К сожалению, Nodejs в однопоточной системе не очень хороши в этом, потому что нет концепции многопоточного механизма, невозможно, и невозможно включить семафорные механизмы в обычный смысл. В результате инженеры не знают, когда вручную выпустить ресурсы.
Если у вас нет абсолютного контроля над своим проектом, вы не используете какие-либо сторонние пакеты, которые используют асинхронные API.
Следовательно, текущий вывод заключается в том, что обещание - это просто метод разработки. Понимание их не подходит для всех сценариев разработки.
Суммировать
Вышеуказанное все о асинхронном API Node.js и его ограничениях. Я надеюсь, что эта статья будет полезна всем. Если у вас есть какие -либо вопросы, пожалуйста, оставьте сообщение для общения.