먼저 Nodejs의 공식 웹 사이트에서 소개를 살펴 보겠습니다.
특성은 다음과 같습니다.
1. JavaScript 실행 환경입니다
2. 코드 설명을 위해 Chrome V8 엔진에 의존하십시오
3. 이벤트 중심
4. 비 블로킹 I/O
5. 가볍고 확장 가능하며 실시간 데이터 상호 작용 애플리케이션에 적합합니다
6. 단일 프로세스, 단일 스레드
(1), Nodejs가 캐리어 언어로 JavaScript를 선택하는 이유
실제로, Node.js를 구현하기 시작했을 때 저자 Ryan Dahl은 JavaScript를 선택하지 않았습니다. 그는 C와 LUA를 시도했습니다. 폐쇄 및 기능 프로그래밍과 같은 고급 언어 기능이 부족하여 프로그램을 복잡하고 유지하기가 어려워 졌기 때문입니다.
JavaScript는 Node.js의 이벤트 중심 프로그래밍 모델에 잘 맞는 기능적 프로그래밍 패러다임을 지원하는 언어입니다. 또한 Google이 제공하는 V8 엔진은 JavaScript 언어의 실행 속도를 크게 향상 시켰습니다.
마지막으로 우리에게 제시되는 것은 node.c, node.lua 또는 기타 언어 구현이 아닌 node.js입니다.
(2) Node.js는 JS 응용 프로그램이 아니라 JS 운영 플랫폼입니다.
Node.js라는 이름을 볼 때 초보자는 이것이 JavaScript 응용 프로그램이라고 잘못 생각할 수 있습니다. 실제로 Node.js는 C ++로 작성되었으며 JavaScript 실행 환경입니다.
Node.js는 성능이 우수하고 파일 작동, 네트워크 프로그래밍 등과 같은 많은 시스템 수준 API를 제공하는 Google Chrome의 V8 엔진을 사용합니다.
다음은 nodejs와 관련된 모든 모듈입니다.
브라우저 측의 JavaScript 코드는 실행할 때 다양한 보안 제한이 적용되며 고객 시스템의 작동은 제한됩니다.
대조적으로, Node.js는 포괄적 인 배경 런타임으로 JavaScript에 다른 언어가 달성 할 수있는 많은 기능을 제공합니다.
(3), node.js의 특징
Node.js는 또한 디자인에서 비교적 혁신적입니다. 단일 프로세스 및 단일 스레드 모드로 실행됩니다 (JavaScript가 실행되는 방식과 일치 함),
이벤트 중심 메커니즘은 이벤트 루프 큐의 내부 단일 스레딩 효율적인 유지 보수를 통해 Node.js에 의해 구현됩니다. 멀티 스레드의 리소스 점령 및 컨텍스트 전환은 없습니다. 이는 대규모 HTTP 요청에 직면하여 Node.js는 이벤트 중심으로 모든 것을 처리한다는 것을 의미합니다.
전통적인 언어에 익숙한 웹 서비스 개발자는 다중 스레드 동시성 및 협업에 매우 익숙 할 수 있지만 Node.js에 직면하여 그 특성을 받아들이고 이해해야합니다.
두 가지 중요한 개념
1. 이벤트 루프 란 무엇입니까? (매우 중요한 개념)
이벤트 루프는 컴퓨터 시스템 작동 메커니즘을 나타내는 매우 중요한 개념입니다.
이벤트 루프를 이해하려면 프로그램의 실행 모드부터 시작해야합니다. 실행 후 프로그램을 프로세스라고합니다. 일반적으로 프로세스는 한 번에 하나의 작업 만 수행 할 수 있습니다.
실행해야 할 작업이 많으면 세 가지 솔루션 만 있습니다.
(1), 라인업. 프로세스는 한 번에 하나의 작업 만 실행할 수 있으므로 후속 작업을 실행하기 전에 이전 작업이 완료 될 때까지 기다려야합니다.
(2), 새로운 프로세스를 만듭니다. 포크 명령을 사용하여 각 작업에 대한 새 프로세스를 만듭니다.
(3), 새 스레드를 만듭니다. 프로세스가 너무 많은 리소스를 소비하기 때문에 오늘날의 프로그램은 종종 프로세스가 여러 스레드를 포함하도록 허용하고 스레드는 작업을 완료합니다.
JavaScript 언어를 예로 들어 보겠습니다. 단일 스레드 언어입니다. 모든 작업은 하나의 스레드에서 완료됩니다. 즉, 위의 첫 번째 방법이 채택됩니다. 많은 수의 작업이나 시간이 많이 걸리는 작업이 발생하면 웹 페이지는 JavaScript가 멈출 수없고 사용자 행동에 응답 할 수 없기 때문에 "가짜 죽음"을 경험합니다.
JavaScript 단일 스레드가 된 이유는 무엇입니까? 멀티 스레드로 구현할 수 없습니까?
이것은 역사와 관련이 있습니다.
JavaScript 언어의 주요 특징은 단일 스레딩입니다. 즉, 동시에 한 가지만 수행 할 수 있습니다. 그렇다면 왜 JavaScript에 여러 스레드가 없습니까? 이것은 효율성을 향상시킬 것입니다.
JavaScript의 단일 스레딩은 그 목적과 관련이 있습니다. 브라우저 스크립팅 언어로서 JavaScript의 주요 목적은 사용자와 상호 작용하고 DOM을 운영하는 것입니다. 이것은 단일 스레드 일 수 있다고 결정합니다. 그렇지 않으면 매우 복잡한 동기화 문제가 발생합니다.
예를 들어, JavaScript가 두 개의 스레드가 동시에 두 개의 스레드가 있고, 하나의 스레드가 특정 DOM 노드에 컨텐츠를 추가하고, 다른 스레드는이 노드를 삭제합니다.
따라서 복잡성을 피하기 위해 JavaScript는 출생의 단일 스레드이며,이 언어의 핵심 특징이되어 향후 변하지 않을 것입니다.
HTML5는 멀티 코어 CPU의 컴퓨팅 성능을 활용하기 위해 웹 워크 서 표준을 제안하여 JavaScript 스크립트가 여러 스레드를 생성 할 수 있지만 하위 스레드는 기본 스레드에 의해 완전히 제어되며 DOM을 작동 할 수 없습니다.
따라서이 새로운 표준은 JavaScript 단일 스레딩의 특성을 변경하지 않습니다.
EventLoop로 돌아 가기 :
단일 스레딩은 모든 작업을 대기해야하며 다음 작업이 실행되기 전에 이전 작업이 실행됩니다. 이전 작업에 시간이 오래 걸리면 다음 작업이 기다려야합니다.
대기열이 많은 양의 컴퓨팅으로 인해 CPU가 너무 바빠서 괜찮을 경우는 괜찮지 만 IO 장치 (입력 및 출력 장치)가 매우 느리기 때문에 CPU가 유휴 상태가되며 (예 : AJAX 작동이 네트워크에서 데이터를 읽습니다), 실행하기 전에 결과를 기다려야합니다.
JavaScript 언어의 디자이너는 현재 주 스레드가 IO 장치를 완전히 무시하고 대기 작업을 중단하며 다음 작업을 먼저 실행할 수 있음을 깨달았습니다. IO 장치가 결과를 반환 할 때까지 기다린 다음 돌아 서서 일시 중단 된 작업을 계속하십시오.
따라서 모든 작업은 두 가지 유형으로 나눌 수 있으며, 하나는 동기 작업이고 다른 하나는 비동기적인 작업입니다. 동기 작업은 기본 스레드에서 대기하는 작업을 나타냅니다. 이전 작업 만 실행되었습니다.
후자의 작업은 실행될 수 있습니다. 비동기 작업은 기본 스레드를 입력하지 않고 "작업 큐"를 입력하는 작업을 말합니다. "작업 대기열"이 기본 스레드에 비동기 작업을 실행할 수 있음을 알리는 경우에만 작업이 실행을 위해 기본 스레드로 들어갑니다.
아래 그림과 같이 :
메인 스레드가 비어있는 한 "작업 대기열"을 읽습니다. 이것은 JavaScript의 실행 메커니즘입니다. 이 과정은 지속적으로 반복됩니다.
3. 예제 설명
자,“말도 안되는”말을 많이하지 말자. 첫 번째 Nodejs 응용 프로그램 인“Hello Big Bear”를 즉시 시작합시다.
좋아하는 편집기를 열고 HelloWorld.js 파일을 만듭니다.
코드는 다음과 같습니다.
코드 사본은 다음과 같습니다. 1 var http = require ( "http"); 2 http.createserver (함수 (요청, 응답) {3 response.writehead (200, {4 "content-type": "text/plain"5}); 6 Respons.Write ( "Hello, Big Bear!"); 7 Responce.end (); 888);
이 코드를 실행하고 테스트합시다. 먼저 Node.js로 스크립트를 실행하십시오.
명령 줄 도구 CMD를 열고 작업 디렉토리로 전환 한 다음 "Node HelloWorld.js"명령을 실행하십시오.
다음으로 브라우저를 열고 http : // localhost : 8888/을 방문하면 "Hello, Big Bear!"라는 단어가있는 웹 페이지가 표시됩니다.
약간의 확장 된 지식 :
아래 그림과 같이, 이것은 nodejs에서 http.js의 소스 코드의 일부입니다. CreateServer는 사용자 친화적 인 인터페이스입니다. 내부 구현은 싱글 톤 모델을 채택합니다. 이것의 장점은 인스턴스의 생성 및 초기화 작업을 효과적으로 분리하고 책임에 집중하며 커플 링을 줄이는 것입니다. 이것은 모든 사람이 프로그래밍 시점에서 배울 수 있다는 생각입니다.
하하하, 그다지 흥미롭지 않습니까? 이것은 짧은 경험입니다. 나중에 많은 지식을 설명하겠습니다. 모두가 천천히 O (∩_∩) o 하하를 이해할 수 있습니다
IV. 전반적인 개요
1. JavaScript 실행 환경입니다
2. 코드 설명을 위해 Chrome V8 엔진에 의존하십시오
3. 이벤트 중심
4. 비 블로킹 I/O
5. 가볍고 확장 가능하며 실시간 데이터 상호 작용 애플리케이션에 적합합니다
6. 단일 프로세스, 단일 스레드
마지막으로, 내가 말하고 싶은 것은이 기사에는 많은 예가 없지만 이러한 개념은 매우 중요합니다. 미래의 Nodejs 학습을위한 탄탄한 토대를 마련 할 수 있도록 명확한 이해가 있어야합니다. 어서, 함께 열심히 일하십시오.
하하하,이 기사는 끝났고 계속되지 않을 것입니다. 나는 당신과 더 많은 의사 소통을하고 함께 진전을 이루기를 바랍니다. . . . . . Huhuhuhu… (*^__^*)