노드는 "트랜잭션 중심" 및 비동기 "I/O" 특성을 갖기 때문에 각 동시 요청에 대해 비차단 비동기 작업이므로 서버는 요청에 대한 실행 이벤트를 등록하고 이벤트를 수행하는 콜백 함수를 제공합니다. 처리가 완료된 후 콜백 함수가 실행되고 다음 이벤트 처리가 실행되므로 노드는 높은 동시성을 달성할 수 있습니다.
이 튜토리얼의 운영 환경: windows10 시스템, nodejs 버전 12.19.0, Dell G3 컴퓨터.
nodejs는 비차단 비동기 작업입니다. 각 동시 요청에 대해 서버는 요청에 대한 실행 이벤트(I/O)를 등록하고 콜백 기능을 제공합니다(이 프로세스는 새 연결 요청을 차단하지 않습니다). 이벤트 처리(I/O)를 순차적으로 실행하고 처리가 완료된 후 콜백 함수를 실행한 후 다음 이벤트 처리(I/O)를 실행한다.
노드가 높은 동시성을 달성할 수 있는 이유를 설명하기 전에 노드의 다른 여러 기능을 이해하는 것이 좋습니다.
Single-threaded
먼저 개념을 명확히 합시다. 즉, 노드는 단일 스레드이며 이는 다음과 일치합니다. JavaScript는 브라우저와 동일한 특성을 가지며 JavaScript 메인 스레드는 노드의 다른 스레드(예: I/O 스레드)와 상태를 공유할 수 없습니다.
싱글 쓰레드의 장점은
멀티 쓰레드처럼 쓰레드 간 상태 동기화 문제에 신경 쓸 필요가 없습니다.
스레드 전환으로 인한 오버헤드가 없습니다.
없습니다. 교착 상태
물론 단일 스레딩에도 많은 단점이 있습니다.
멀티 코어 CPU를 완전히 활용할 수 없습니다.
CPU를 차지하는 많은 계산으로 인해 응용 프로그램이 차단됩니다(예: CPU에 적합하지 않음) -집약적)
오류로 인해 전체 애플리케이션이 종료됩니다
Asynchronous I/O
노드가 단일 스레드이고 모든 이벤트가 단일 스레드에서 처리되므로 이렇게 물어볼 수도 있습니다. 비효율적이고 높은 동시성에 반대됩니까?
반대로 노드의 성능은 매우 높습니다. 그 이유 중 하나는 노드에 비동기 I/O 기능이 있기 때문입니다. I/O 요청이 발생할 때마다 노드는 요청에 대한 I/O 스레드를 제공합니다. 그러면 노드는 I/O 작업 프로세스에 신경 쓰지 않고 기본 스레드에서 이벤트를 계속 실행합니다. 요청이 콜백을 반환할 때만 처리하면 됩니다. 즉, 노드는 요청을 기다리는 데 많은 시간을 절약합니다.
이것은 노드가 높은 동시성을 지원하는 중요한 이유 중 하나이기도 합니다
실제로 I/O 작업뿐만 아니라 노드의 대부분의 작업이 이러한 비동기 방식으로 수행됩니다. 모든 일을 개인적으로 할 필요는 없고 구성원들에게 올바르게 작동하는 방법, 피드백을 수용하고 주요 단계를 처리하는 방법만 알려주면 팀 전체가 효율적으로 운영될 수 있습니다.
Transaction-driven
다시 물어보고 싶을 수도 있습니다. 노드는 요청이 콜백을 반환했다는 것을 어떻게 알 수 있으며 언제 이러한 콜백을 처리해야 합니까?
답은 노드의 또 다른 특징입니다: 트랜잭션 중심, 즉 메인 스레드가 이벤트 루프 트리거를 통해 프로그램을 실행합니다.
이것은 노드가 높은 동시성을 지원하는 또 다른 중요한 이유입니다
추천 연구: " nodejs 비디오 튜토리얼》
위 내용은 노드가 높은 동시성을 가질 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!