Давайте сначала посмотрим на введение на официальном сайте Nodejs:
Его характеристики:
1. Это среда бега JavaScript
2. Полагаться на двигатель Chrome V8 для объяснения кода
3
4. Не блокирующий ввод-вывод
5. Легкие, масштабируемые, подходящие для приложений взаимодействия с данными в реальном времени
6. Один процесс, единственный поток
(1), почему Nodejs выбирают JavaScript в качестве языка носителя
На самом деле, в начале реализации node.js автор Райан Дал не выбрал JavaScript. Он попробовал C и Lua, потому что ему не хватало некоторых языковых функций высокого уровня, таких как закрытие и функциональное программирование, что сделало программу сложной и трудной для поддержания.
JavaScript-это язык, который поддерживает парадигму функционального программирования, которая хорошо вписывается в модель программирования Node.js. Кроме того, двигатель V8, предоставленный Google, значительно улучшил скорость выполнения языка JavaScript.
Наконец, нам представлено Node.js, а не node.c, node.lua или другие языковые реализации.
(2) node.js не является приложением JS, а платформой операции JS
Когда вы видите название node.js, начинающие могут ошибочно подумать, что это приложение JavaScript. Фактически, node.js написан в C ++ и является средой JavaScript.
Node.js использует двигатель V8 Google Chrome, который обладает хорошей производительностью, а также обеспечивает множество API системного уровня, таких как работа файла, сетевое программирование и т. Д.
Вот все модули, участвующие в Nodejs:
Код JavaScript на стороне браузера будет подвергаться различным ограничениям безопасности при запуске, а эксплуатация системы клиента ограничена.
Напротив, node.js - это всеобъемлющее фоновое время выполнения, обеспечивая JavaScript со многими функциями, которые могут достичь другие языки.
(3), функции Node.js
Node.js также относительно инновационен в дизайне. Он работает в однопроцессовом и однопоточном режиме (это согласуется с тем, как работает JavaScript),
Механизм, управляемый событиями, реализован Node.js с помощью внутреннего однопоточного эффективного обслуживания очередей цикла событий. Не существует ресурсной профессии и переключения контекста многопоточных. Это означает, что перед лицом крупномасштабных HTTP-запросов Node.js обрабатывает все с помощью событий.
Разработчики веб-сервисов, которые привыкли к традиционным языкам, могут быть очень знакомы с многопоточной параллелизмом и сотрудничеством, но перед лицом Node.js мы должны принять и понять его характеристики.
Два, важные понятия
1. Что такое цикл событий? (Очень важная концепция)
Цикл событий является очень важной концепцией, относящейся к операционному механизму компьютерной системы.
Если вы хотите понять цикл событий, вы должны начать с режима работы программы. Программа после запуска называется процессом. Как правило, процесс может выполнять только одну задачу за раз.
Если есть много задач, которые нужно выполнить, есть только три решения.
(1), выстраивать. Поскольку процесс может выполнять только одну задачу за раз, он должен ждать, пока предыдущая задача не будет выполнена до выполнения последующей задачи.
(2), создайте новый процесс. Используйте команду Fork, чтобы создать новый процесс для каждой задачи.
(3), Создайте новую ветку. Поскольку процессы потребляют слишком много ресурсов, сегодняшние программы часто позволяют процессу содержать несколько потоков, а потоки выполняют задачу.
Возьмите язык JavaScript в качестве примера. Это однопоточный язык. Все задачи выполнены на одном потоке, то есть принят первый метод выше. После того, как вы столкнетесь с большим количеством задач или трудоемкой задачи, на веб-странице будет «фальшивая смерть», потому что JavaScript не может остановиться и не может ответить на поведение пользователя.
Вы можете спросить, почему JavaScript один резьба? Разве это не может быть реализовано как многопоточное?
Это как -то связано с историей:
Основной особенностью языка JavaScript является единственное потоки, что означает, что вы можете сделать только одну вещь одновременно. Итак, почему у JavaScript нет нескольких потоков? Это повысит эффективность.
Единственное потоки JavaScript связано с его целью. Как язык сценариев браузера, основная цель JavaScript - взаимодействовать с пользователями и управлять DOM. Это определяет, что он может быть только однопоточным, в противном случае это вызовет очень сложные проблемы синхронизации.
Например, предположим, что у JavaScript есть два потока одновременно, один поток добавляет содержимое в определенном узле DOM, а другой поток удаляет этот узел, какой поток должен взять браузер в это время?
Следовательно, чтобы избежать сложности, JavaScript - это единственный поток от его рождения, который стал основной особенностью этого языка и не изменится в будущем.
Чтобы использовать вычислительную мощность многоядерных процессоров, HTML5 предлагает стандарт веб-работника, позволяя JavaScript Scripts создавать несколько потоков, но детские потоки полностью управляются основным потоком и не могут управлять DOM.
Следовательно, этот новый стандарт не меняет природу отдельного потока JavaScript.
Вернуться к Eventloop:
Одиночный потоки означает, что все задачи должны быть в очереди, и предыдущая задача будет выполнена до выполнения следующей задачи. Если предыдущая задача занимает много времени, следующая задача должна ждать.
Если очередь происходит из -за большого количества вычислений, а процессор слишком занят, это было бы хорошо, но много раз процессор простаивает, потому что устройство iO (устройство ввода и вывода) очень медленное (например, данные операции Ajax считывает данные из сети), и вы должны ждать результата, чтобы получить результат до его выполнения.
Дизайнер языка JavaScript понял, что в настоящее время основной поток может полностью игнорировать устройство IO, приостановить задачи ожидания и сначала запустить следующие задачи. Подождите, пока устройство IO не вернет результат, затем развернитесь и продолжайте приостановленную задачу.
Следовательно, все задачи можно разделить на два типа, один - синхронная задача, а другая - асинхронная задача. Синхронные задачи относятся к задачам, в очереди на основном потоке, была выполнена только предыдущая задача.
Последняя задача может быть выполнена; Асинхронная задача относится к задаче, которая не входит в основной поток, но входит в «очередь задач». Только когда «очередь задач» уведомляет основной поток, что может быть выполнена асинхронная задача, задача введет основной поток для выполнения.
Как показано на рисунке ниже:
Пока основной поток пуст, он будет читать «очередь задач». Это работающий механизм JavaScript. Этот процесс будет повторяться непрерывно.
3. Пример объяснения
Хорошо, давайте не будем говорить много «чушь», давайте немедленно начнем наше первое приложение Nodejs: «Привет, Биг Медведь».
Откройте свой любимый редактор и создайте файл helloworld.js .
Код заключается в следующем:
Кода кода выглядит следующим образом: 1 var http = require ("http"); 2 http.createserver (function (запрос, ответ) {3 response.writehead (200, {4 "Контент-тип": "text/plain" 5}); 6 response.write ("Привет, Big Bear!"); 7 response.end (); 8}). Слушай (8888);
Давайте запустим и проверим этот код. Сначала выполните свой сценарий с помощью node.js:
Откройте инструмент командной строки CMD, переключитесь на свой рабочий каталог и запустите команду "node helloworld.js"
Затем откройте браузер и посетите http: // localhost: 8888/, и вы увидите веб -страницу со словами «Привет, Big Bear!».
Немного расширенного знания:
Как показано на рисунке ниже, это является частью исходного кода http.js в Nodejs. CreateServer-это удобный интерфейс. Внутренняя реализация принимает модель Синглтона. Преимущество этого состоит в том, чтобы эффективно разделить задачи создания и инициализации экземпляров, сосредоточиться на обязанностях и уменьшить связь. Это идея, которую каждый может извлечь уроки, когда программирование.
Хахаха, разве это не очень интересно? Это всего лишь короткий опыт. Я объясню много знаний позже. Каждый может медленно понять O (∩_∩) o ха -ха ~
IV Общий обзор
1. Это среда бега JavaScript
2. Полагаться на двигатель Chrome V8 для объяснения кода
3
4. Не блокирующий ввод-вывод
5. Легкие, масштабируемые, подходящие для приложений взаимодействия с данными в реальном времени
6. Один процесс, единственный поток
Наконец, я хочу сказать: в этой статье не так много примеров, но эти концепции очень важны. У вас должно быть четкое понимание, чтобы вы заложили прочную основу для будущего обучения Nodejs. Давай, работай много вместе.
Хахаха, эта статья закончилась и не будет продолжена. Я надеюсь общаться с вами больше и добиться прогресса вместе. Полем Полем Полем Полем Полем Хухухуху… (*^__^*)