Является ли узел однопоточным или многопоточным?

Js-операция (ваш код) узла работает в одном потоке, предоставляемом библиотекой libuv. Библиотека Libuv предоставляет больше потоков для задач, связанных с системой. Таким образом, завершите Node, учитывая его многопоточность.

Как работает Node.js внутри

Внутренняя работа Node разделена на 3 основные части (цикл событий Js+V8+libuv lib). Код Js, использующий библиотеки js, такие как модули узлов, переходит в v8 engine.process.binding() — это функция, в которой код Js встречается с кодом C++. Движок v8 преобразует код JS в код C++, теперь, когда код C++ переходит в библиотеку Libuv, которая составляет 100 за каждый написанный в C++, который предоставляет 4 основные функции для узла (http,fs,path/os,crypto) для параллелизма, задач, связанных с системой обработки файлов.

Пул потоков или один поток, предоставляемый libuv, используется циклом событий Javascript, который выполняет все асинхронные операции.

Как работает цикл событий

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

В цикле событий работает 6 фаз (тиков).

1. Таймеры: где все таймеры setTimeout, setInterval остаются в куче памяти до истечения срока их действия.

2. Ожидание обратного вызова: выполняются все ожидающие обратные вызовы, связанные с системой/ОС, если таковые имеются.

3.Idle: используется узлом внутри

4.Poll: где на самом деле выполняются все времена, кроме setImmediate

5.Проверьте: где выполняются обратные вызовы setImmediate

6.Close: выполняются все события закрытия, такие как закрытие файла, событие закрытия сокета.

Каждая фаза также имеет свою собственную очередь, которая далее делится на макро- и микро-очередь. Макро-задача, такая как тяжелые таймеры setTimeout, setInterval. Микрозадачи похожи на promise.resolve, process.callback(). Эти микрозадачи имеют больше приоритетов, чем макрозадачи, поэтому выполняются перед предстоящими следующими микрозадачами, поэтому работают быстро.

Почему node.js работает быстро

  • Однопоточный неблокирующий ввод-вывод, поэтому может обрабатывать больше запросов, чем многопоточный, потому что процессор не ждет ввода-вывода, может обслуживать другие запросы
  • Асинхронный характер (потоки параллельны)
  • Любая коммуникация работает на события легко и быстро
  • Нет взаимоблокировок из-за потоков
  • Нет выделения памяти для потоков для каждого запроса, так что молниеносно
  • Можно использовать кластеры для обработки еще большего количества запросов
  • Многопоточный язык С++, java должен выделить всю среду выполнения для другого языка сценариев, такого как php, ruby.
  • НЕИСПРАВНОСТЬ УЗЛА, ГДЕ ИСПОЛЬЗУЕТСЯ ЗАДАЧА ЦП, он может содержать один поток, например, кодирование, обработку изображений.

Что такое закрытие

Замыкание — это внутренняя функция, которая имеет доступ к внешним (включающим) переменным функции — цепочке областей видимости. Замыкание имеет три цепочки областей видимости: оно имеет доступ к собственной области видимости (переменные, определенные в фигурных скобках), оно имеет доступ к переменным внешней функции и имеет доступ к глобальным переменным.

Плюсы: можно создать частную область, изолированную загрязненной глобальной областью.

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

Реализовать: функция карри, бесконечное вариативное каррирование

Параллелизм, параллелизм и асинхронность

Параллелизм: отдельные потоки с выделенным процессором работают параллельно, медленно, с большим объемом памяти.

Параллелизм: контекстное переключение процессора на задания в любое время, независимое. Параллельные потоки потребляют общую память с использованием блокировок.

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

Кластеры

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

В кластере мы разветвляем рабочие потоки, используя дочерний процесс, все запускаются на одном порту, все запускаются в конфигурации master-slave. Рекомендуется создать количество потоков = количество ядер.

Процесс и потоки

Процесс: исполняемая программа, работающая в отдельной памяти.

Поток: наименьшая последовательность запрограммированных инструкций, управляемая планировщиками, входящими в состав ОС. В рамках одного и того же потока процесса используется одна и та же память.

Создание и разветвление

Порождать :

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

Вилка:

  • instance of spawn (особый вид spawn)
  • создает новый экземпляр v8
  • несколько рабочих, выполняющих одну и ту же кодовую базу
  • может развернуть однопоточный js на нескольких ядрах в качестве рабочей вилки
  • простой обмен сообщениями от родителя к ребенку son/xml

Обратные вызовы и обещания

Обратные вызовы: в традиционных javascript обратные вызовы использовались для обработки асинхронной операции, чтобы выполнить операцию синхронизации путем передачи функции обратного вызова для выполнения при выполнении асинхронного вызова. Теряет основные функции программирования, доступные в других языках, такие как return, throw. Ошибку вручную необходимо обрабатывать с помощью шаблона обратного вызова error first.

Минусы: ад обратных вызовов

Обещание: обещание — это специальный объект JavaScript, который связывает «производство… Его аргументы разрешения и отклонения — это обратные вызовы, предоставляемые самим JavaScript. Это быстро, потому что это микрозадача в цикле событий, надежна и масштабируема, и обеспечивает хорошую обработку ошибок.

Минусы: цепочка обещаний

Асинхронное ожидание

Новые функции ES6, асинхронная функция возвращает промисы и может разрешать любые промисы с помощью ключевого слова await.

Плюсы: выглядит лучше, решает проблему с цепочкой обещаний. Лучшая обработка ошибок, лучшая отладка (поддерживает точку останова, невозможную в цепочке обещаний).

Минусы: немного медленный, удерживает исполнителя до тех пор, пока обещание не будет разрешено

Микросервис против монолита

Плюсы Monolith: единое развертывание, безопасная и быстрая разработка, единая и централизованная кодовая база.

Минусы Monolith: сбой в одной точке, каждое развертывание приводит к простою всех API, только вертикальное масштабирование невозможно через некоторое время.

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

Минусы микрослужбы: поддержание количества служб имеет решающее значение, является сложным и дорогостоящим, менее безопасным, распределенной кодовой базой.

JWT

Веб-токен на основе Json содержит в основном три части: алгоритм шифрования, сообщение и секретный ключ. Он легкий и хорош для бессерверных микросервисов. Но это рискованно.

HTTPS, HTTPS и HTTP2

http: «Протокол передачи гипертекста» лучше всего подходит для связи клиент-сервер.

https: оберните http шифрованием SSL

http2: не текстовый, его двоичный протокол (быстрый). Он поддерживает мультиплексирование, что означает множественный вызов в одном запросе. Он также поддерживает дуплексную связь.

REST, SOAP и RPC

Rpc: старые неструктурированные необработанные данные

Мыло: необходимо следовать WSDL, проблема преобразования

Остальное: (представленный перевод состояния). Набор правил, как будет выглядеть API, запрос, ответ. Http, HTTPS протоколы. HTTP-методы get, post, put, patch, delete.

Еще несколько тем

Promise.all() против promise.race()

Полифилы для фильтра, карты, уменьшения.

Подъем, почему

Пример практического использования сомнительных функций

Импорт против требования

Как добиться наследования прототипов, практическое использование

Звоните, обращайтесь ,привяжите практическое применение

Плюсы и минусы стрелочных функций

Let vs const vs var vs global

Количество способов создания объектов

Локальное хранилище против файлов cookie против сессий

Всплывающие события

Функции устранения дребезга