nodejs는 js가 아니라 js를 서버에서 실행할 수 있게 해주는 플랫폼입니다. Node.js(전체 이름 JavaScript)는 프로그래밍 언어이고, Node는 JavaScript가 서버에서 실행될 수 있도록 하는 개발 플랫폼인 Chrome V8 엔진을 기반으로 하는 JavaScript 실행 환경입니다.
이 튜토리얼의 운영 환경: windows7 시스템, nodejs 버전 12.19.0, DELL G3 컴퓨터.
nodejs는 js가 아니라 js를 서버에서 실행할 수 있게 해주는 플랫폼입니다.
Node.js는 2009년 5월에 출시되었으며 Ryan Dahl이 개발했습니다. 이는 Chrome V8 엔진을 기반으로 하는 JavaScript 실행 환경으로, 이벤트 중심의 비차단 I/O 모델을 사용하여 JavaScript가 실행될 수 있도록 합니다. JavaScript를 PHP, Python, Perl 및 Ruby와 같은 서버 측 언어와 동등한 스크립팅 언어로 만드는 서버 측 개발 플랫폼입니다.
JavaScript는 Node.js 기술을 기반으로 서버 측 프로그래밍을 수행할 수 있습니다.
Node.js의 특징
Non-blocking asynchronous io
예를 들어 데이터를 얻기 위해 데이터베이스에 접근할 때 시간이 좀 걸립니다. 전통적인 단일 스레드 처리 메커니즘에서는 데이터베이스에 액세스하는 코드를 실행한 후 전체 스레드가 일시 중지되고 후속 코드를 실행하기 전에 데이터베이스가 결과를 반환할 때까지 기다립니다. 즉, I/O는 코드의 실행을 차단하여 프로그램의 실행 효율성을 크게 떨어뜨립니다.
Node.js에서 사용되는 비차단 I/O 메커니즘으로 인해 데이터베이스에 액세스하는 코드가 실행된 후 그 뒤의 코드가 즉시 실행되고 데이터베이스 반환 결과에 대한 처리 코드가 콜백 함수를 사용하여 프로그램의 실행 효율성을 향상시킵니다.
I/O가 완료되면 I/O 작업을 수행하는 스레드에 이벤트 형태로 통보되고 스레드는 이 이벤트에 대한 콜백 함수를 실행합니다. 비동기 I/O를 처리하기 위해서는 스레드에 이벤트 루프가 있어야 하며, 처리되지 않은 이벤트가 있는지 지속적으로 확인하고 이를 차례로 처리해야 합니다.
블로킹 모드에서는 하나의 스레드가 하나의 작업만 처리할 수 있으므로 처리량을 향상하려면 멀티스레딩을 사용해야 합니다. 비차단 모드에서는 스레드가 항상 계산 작업을 수행하고 이 스레드의 CPU 코어 사용률은 항상 100%입니다. 그러므로 이것은 특히 철학적인 해결책이다. 많은 사람을 놀리느니 차라리 한 사람이 목숨을 걸고 죽도록 일하는 것이 낫다는 것이다.
단일 스레드
Java, PHP 또는 .net과 같은 서버 측 언어에서는 클라이언트 연결마다 새 스레드가 생성됩니다. 각 스레드에는 약 2MB의 메모리가 필요합니다. 즉, 이론적으로 8GB 메모리를 탑재한 서버에 동시에 접속할 수 있는 최대 사용자 수는 약 4,000명 정도이다. 웹 애플리케이션이 더 많은 사용자를 지원하려면 서버 수를 늘려야 하며, 웹 애플리케이션의 하드웨어 비용도 당연히 증가합니다.
Node.js는 클라이언트 연결마다 새 스레드를 생성하지 않고 하나의 스레드만 사용합니다. 사용자가 연결하면 비차단 I/O 및 이벤트 기반 메커니즘을 통해 내부 이벤트가 트리거되며 Node.js 프로그램은 거시적으로 병렬입니다. Node.js를 사용하면 8GB 메모리를 갖춘 서버가 40,000개 이상의 사용자 연결을 동시에 처리할 수 있습니다.
또한 단일 스레딩이 가져오는 이점은 운영 체제에 더 이상 스레드 생성 및 삭제에 대한 시간 오버헤드가 없다는 것입니다. 그러나 단일 스레딩에도 단점이 많이 있습니다. 자세한 내용은 Node.js의 단점에서 설명하겠습니다. 계속해서 읽어주세요.
Event-driven
Node에서는 클라이언트가 연결 설정, 데이터 제출 등을 요청하면 해당 이벤트가 트리거됩니다. Node에서는 한 번에 하나의 이벤트 콜백 함수만 실행할 수 있지만, 이벤트 콜백 함수를 실행하는 도중에 다른 이벤트가 발생하고 대신 다른 이벤트를 처리(예: 신규 사용자 접속)한 후 Return할 수 있다. 원래 이벤트를 계속 실행하는 콜백 함수를 "이벤트 루프" 메커니즘이라고 합니다.
Node.js의 맨 아래 레이어는 C++입니다(V8도 C++로 작성되었습니다). 기본 코드의 거의 절반이 이벤트 큐와 콜백 함수 큐를 구성하는 데 사용됩니다. 이벤트 기반을 사용하여 서버 작업 일정을 완료하는 것은 천재만이 생각할 수 있는 일입니다. 실을 이용해 바늘끝에서 춤을 추는 것은 많은 일을 처리하는 임무를 맡는다.
Node.js의 핵심이라고도 할 수 있는 이벤트 루프에 주목하세요. 다음은 Node.js 공식 홈페이지의 인용문입니다
┌───────────────────────────┐ ┌─>│ timers │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ pending callbacks │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ │ │ idle, prepare │ │ └─────────────┬─────────────┘ ┌───────────────┐ │ ┌─────────────┴─────────────┐ │ incoming: │ │ │ poll │<─────┤ connections, │ │ └─────────────┬─────────────┘ │ data, etc. │ │ ┌─────────────┴─────────────┐ └───────────────┘ │ │ check │ │ └─────────────┬─────────────┘ │ ┌─────────────┴─────────────┐ └──┤ close callbacks │ └───────────────────────────┘
Node 공식 홈페이지의 인용문:
참고: 각 상자는 이벤트 루프의 "단계"라고 합니다.
각 단계에는 실행될 콜백의 FIFO 대기열이 있습니다. 각 단계는 고유한 방식으로 특별하지만 일반적으로 이벤트 루프가 특정 단계에 들어가면 해당 단계에 특정한 작업을 수행한 다음 대기열이 소진되거나 최대 콜백 수가 소진될 때까지 해당 단계의 대기열에서 콜백을 실행합니다. 처형되었습니다. 대기열이 소진되거나 콜백 제한에 도달하면 이벤트 루프가 다음 단계로 이동합니다.
이벤트 루프에 대한 내용은 면접관들이 종종 특정 실행 출력에 대해 질문하는 경우가 많습니다. 제 글을 읽어보세요
Cross-platform
처음에는 Node가 Linux 플랫폼에서만 실행될 수 있습니다. 나중에 Node가 개발되면서 Microsoft는 Node의 존재를 알아차리고 Node가 Windows 플랫폼과의 호환성을 달성할 수 있도록 팀을 투자했습니다. v0.6.0 버전이 출시되면 Node는 Window 플랫폼에서 직접 실행될 수 있습니다. Node는 libuv를 기반으로 하는 크로스 플랫폼입니다.
Node.js의 단점
싱글 스레딩의 단점
Node.js의 한 가지 기능은 단일 스레딩으로 많은 이점을 제공하지만 단점도 있습니다. 다음과 같습니다.
멀티 코어 CPU를 활용할 수 없습니다
이 오류로 인해 전체 애플리케이션이 종료되고 비동기 I/O를 계속 호출할 수 없습니다.
많은 양의 계산이 CPU를 차지하므로 CPU를 사용할 수 없습니다. 비동기 I/O를 계속 호출
Node.js 애플리케이션 시나리오
에서는 Node.js의 특징과 단점을 소개하고 Node.js의 애플리케이션 시나리오에 대해 이야기합니다.
Node.js는 어떤 종류의 애플리케이션 개발에 적합합니까?
I/O는 잘하는데 계산은 잘 못해요. Node.js는 작업 스케줄링에 가장 뛰어나기 때문에 비즈니스에 CPU 계산이 많으면 실제로 이 계산이 이 단일 스레드를 차단한다는 의미이며 이는 Node 개발에 적합하지 않지만 해결책이 없는 것은 아닙니다. 적합한.
Node.js는 애플리케이션이 대량의 동시 I/O를 처리해야 하고 클라이언트에 응답을 보내기 전에 애플리케이션 내에서 매우 복잡한 처리가 필요하지 않은 경우에 매우 적합합니다. Node.js는 긴 연결을 통해 실시간 대화형 애플리케이션을 개발하기 위해 웹 소켓을 사용하는 데에도 매우 적합합니다.
구체적인 시나리오는 다음과 같이 표현할 수 있습니다.
첫 번째 범주: 사용자 양식 수집 시스템, 배경 관리 시스템, 실시간 상호 작용 시스템, 시험 시스템, 네트워킹 소프트웨어, 동시성 웹 애플리케이션
두 번째 카테고리: 웹, 캔버스 등을 기반으로 하는 멀티플레이어 온라인 게임 세 번째 카테고리: 웹 기반 멀티플레이어 실시간 채팅 클라이언트, 채팅방, 그래픽 및 텍스트 라이브 방송 네 번째 카테고리: 단일 웹 브라우저 애플리케이션;
Yahoo : Yahoo는 Node.js의 도움으로 YUI3 프런트엔드 프레임워크의 기능을 서버 측으로 확장하는 Cooktail 프레임워크를 공개했습니다.
Tencent: 실시간 기능을 제공하기 위해 긴 연결에 Node를 적용합니다.
"]
위 내용은 nodejs는 js인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!