Предисловие
На моем изображении асинхронное впервые появилось с Ajax. Я все еще работал над .NET в то время, а затем .NET фактически выпустил асинхронный контроль ...
Хотя я, наконец, знал, что это не асинхронно ... тогда широкий асинхронный часто используется. Если это не асинхронная программа, вам стыдно сказать, что Nodejs, которые вы написали, были сделаны с помощью возможностей JavaScript.
Особенность асинхронной модели программирования также была привлечена. У Asynchronous есть много преимуществ, но это кошмар для дизайна. Асинхронный может нарушить время, поэтому он увеличивает трудности с дизайном.
Тем не менее, асинхронно произвел революцию в улучшении производительности и пользовательском опыте, поэтому асинхронные особенности Nodejs вполне очевидны. Сегодня мы узнаем это просто
Асинхронный ввод/вывод
Фактически, на уровне операционной системы есть только два метода ввода/вывода, заблокированные и не заблокированные
В модели блокировки приложение должно дождаться завершения ввода -вывода, прежде чем вернуть результат. Его характеристика заключается в том, что задний полузащитник призван ждать, пока система завершит все операции. Это приведет к тому, что процессор будет ждать, а не вернуться сразу после вызова блокировки.
Я читал книгу, когда был новичком, но я чувствовал, что ее здесь явно не описано. Более того, асинхронная модель на самом деле очень большая, просто улучшение уровня чувств. Позвольте мне привести вам простой пример
Теперь у меня есть одностраничное представление приложения двух одностраничных приложений. Когда я ищу, мне нужно искать по различным каналам. Шэньчжэнь должен позвонить третьей стороне, а третья сторона получает данные из определенных каналов.
Конечно, в настоящее время это очень медленно. Если я напрямую отключу от A до B и B, чтобы загрузить данные, проблем не будет, но теперь проблема в том, что мне нужны эффекты анимации при переключении от A на B.
Это требует, чтобы рендеринг Bview закончился во время процесса переключения, и, по крайней мере, он не будет отправлен в процесс для получения данных и запуска рендеринга. Следовательно, асинхронно может быть не так проще в использовании. Даже если данные запрошены асинхронно, данные должны быть получены до того, как страница будет загружена.
Это все еще блокированная загрузка, нет возможности сделать это в бизнесе
Никакая технология не является идеальной, заблокированная ЦП в ожидании потраченной впустую, логика не блокировки, может также потребовать опроса, чтобы подтвердить, будет ли нагрузка завершена (я использовал для определения того, был ли сгенерирован DOM)
Nodejs принимает механизм цикла событий. Когда процесс начнется, узел создаст мертвую петлю. Каждый процесс выполнения тела петли является клером. Процесс каждого тика состоит в том, чтобы увидеть, есть ли события, которые необходимо обработать.
Если есть, удалите связанное событие, выполните его, а затем введите следующую логику. Если нет, выйдите из петли
Во время каждого процесса тика есть один или несколько наблюдателей в каждом цикле событий. Процесс оценки того, есть ли событие, которое нужно обрабатывать, состоит в том, чтобы спросить этих наблюдателей, нужно ли обработать событие.
Возьмите нашу модель событий HTML в качестве примера
Для HTML на самом деле каждый из его DOM является наблюдателем. Дом страницы наблюдает за изменениями нашей веб -страницы. После того, как мы предоставим AddEventListener DOM, мы зарегистрируем функцию обратного вызова. События, которые мы регистрируем, будут размещены в объекте «контейнер». В настоящее время это всего лишь регистрация. Эти функции будут запускаться после выполнения условий (когда страница изменяется), и связанные события будут выведены из контейнера для выполнения.
Теперь мы нажимаем на точку на странице один раз, а затем вытащим коллекцию событий Click из контейнера. Мы найдем соответствующие DOMS, а затем запустим функции обратного вызова этих DOMS.
События могут исходить от кликов пользователя или изменений данных. В узле события в основном поступают из сетевых запросов и ввода -вывода файлов. Эти события будут иметь соответствующие наблюдатели, такие как наблюдатели файлов и сетевые наблюдатели.
Это также типичная модель производства/потребления, асинхронные ввод/вывода, сетевые запросы для обеспечения производства событий, события передаются различным наблюдателям, событиям наблюдателей, и петли событий несут ответственность за принятие событий, а затем выполнение событий
PS: взять нажмите в качестве примера. Каждый наблюдатель DOM сначала регистрирует событие, процесс страницы постоянно отслеживает страницу, пользователь нажимает на производственное событие страницы, а затем зарегистрированное событие Click выводится из контейнера и выполняется.
Общая функция логика контролируется нами:
Кода -копия выглядит следующим образом:
var foreach = function (список, обратный вызов) {
for (var i = 0, len = list.length; i <len; i ++) {
обратный вызов (список [i], i, list);
}
}
В случае Asynchronous функция обратного вызова больше не контролируется разработчиком. Каждый раз, когда инициируется вызов JS, будет создан объект запроса продукта переходного продукта.
Кода -копия выглядит следующим образом:
fs.open = function (путь, флаги, режим, обратный вызов) {
bingding.open (pathmodule._makelong (path), stringtoflags (flags), режим, обратный вызов);
};
FS.Open открывает файл на основе пути и параметров для получения соответствующих данных. Интерфейс, связанный с C ++, называется внутренне, а промежуточный объект будет генерироваться во время процесса, и все наши состояния будут включены ...
PS: я не чувствую себя хорошо после того, как я так долго просмотрел его
Заключение
Вышеуказанное все об асинхронном вводе/выводе в Nodejs. Личное резюме, если есть какие -либо упущения или ошибки, укажите на них.