이 글에서는 프로세스와 스레드를 소개하고, Node.js의 스레드를 이해하고, 노드가 실제로 단일 스레드인지, child_process 및 클러스터 모듈인지 확인하고, 여러 스레드 간에 통신하는 방법에 대해 간략하게 설명합니다.
운영 체제에서 프로세스에 대한 설명: 프로세스는 데이터 세트에 대한 특정 독립적인 기능을 가진 프로그램의 동적 실행 프로세스이며 리소스를 할당하고 예약하는 운영 체제입니다. . 애플리케이션이 실행되는 캐리어인 독립 단위입니다.
는 애플리케이션의 실행 프로세스입니다(동적 개념).
은 시스템 할당 및 리소스 스케줄링을 위한 기본 단위입니다(프로세스는 일반적으로 프로그램, 데이터 수집 및 프로세스 제어 블록의 세 부분으로 구성됩니다)
모든 프로세스에는 자체적인 독립적인 공간 주소와 데이터 스택이 있습니다(데이터는 프로세스 간에 공유되지 않으며 다른 방법을 통해 통신될 수 있음). 프로세스에는 일반적으로 초기 상태, 실행 상태, 대기 상태, 준비 상태 및 5가지 상태가 있습니다. 종료 상태
스레드는 프로그램 실행에서 단일 순차 제어 프로세스로, 프로그램 실행 흐름의 최소 단위이자 프로세서 스케줄링 및 디스패치의 기본 단위입니다.
작업 스케줄링 및 실행의 최소 단위
프로세스 내 단일 코드 실행 경로
스레드는 프로그램 실행과 프로세스의 최소 단위입니다. 운영체제가 할당하는 자원의 가장 작은 단위 단위 프로세스는 하나 이상의 스레드로 구성됩니다. 스레드는 프로세스 내에서 서로 다른 코드 실행 경로입니다. 그러나 프로그램의 메모리 공간은 스레드 간에 공유됩니다. 동일한 프로세스에서 스레드 컨텍스트 전환이 프로세스 컨텍스트 전환보다 빠릅니다
노드의 프로세스는 단일 스레드입니다. 즉, 프로세스는 하나의 스레드 노드만 엽니다. [추천 학습: "nodejs tutorial"]
정말 단일 스레드인가요?
노드는 단일 스레드이지만 기본 레이어는 다중 스레드입니다. 이벤트 루프에서 libuv 라이브러리는 이벤트 큐에서 작업을 꺼내어 처리를 위해 다른 스레드에 할당합니다. 이제 하드웨어 조건은 이전만큼 열악하지 않습니다. 단일 스레드만 사용하여 작업하면 리소스가 낭비됩니다. 따라서 다중 프로세스 처리를 달성하고 다중 코어 CPU의 장점을 최대한 활용하기 위해 Node는 child_process 모듈과 클러스터 모듈을 제공합니다.
child_process 모듈은 여러 하위 프로세스를 시작하는 데 사용됩니다. 하위 프로세스는 서로 다른 명령을 실행하거나 node.js 모듈 파일 및 실행 파일을 실행합니다.
Cluster 모듈, 클러스터 모듈은 Node.js 애플리케이션을 구현하는 데 사용됩니다. 여러 하위 프로세스를 열고 각 하위 프로세스는 처리를 위해 Node.js 애플리케이션 사본을 실행합니다
child_process.spawn(): 이미지 처리와 같은 대량의 데이터를 반환하는 데 적합합니다. , 이진 데이터를 다룹니다.
child_process.exec(): 소량의 데이터에 적합합니다. maxBuffer의 기본값은 200 * 1024입니다. 이 기본값을 초과하면 프로그램이 중단될 수 있습니다. 사용된.
child_process.execFile(): child_process.exec()와 유사하지만 차이점은 셸을 통해 실행할 수 없으며 I/O 리디렉션 및 파일 검색과 같은 동작을 지원하지 않는다는 것입니다
child_process.fork (): 파생물 새 프로세스는 서로 독립적입니다. 각 프로세스에는 자체 V8 인스턴스와 메모리가 제한되어 있습니다. 일반적으로 시스템 * CPU 수에 따라 너무 많은 하위 프로세스를 생성하는 것은 권장되지 않습니다. 코어.
cluster.fork([env])는 하위 프로세스를 시작하고 하위 프로세스에 Node.js 애플리케이션의 인스턴스를 생성합니다.
isMaster 속성과 isWorker 속성은 다음 작업에 사용됩니다. 기본 프로세스에서 실행할지 아니면 하위 프로세스에서 실행할지 결정합니다. Workers 속성은 모든 하위 프로세스에서 실행되는 작업자 개체를 얻는 데 사용됩니다. 확장하려면 여러 스레드가 어떻게 통신합니까?
세마포(뮤텍스, 조건 변수, 읽기-쓰기 잠금)
메모리 공유( 익명, 명명)
원격 프로시저 호출
프로세스 간 통신은 노드뿐만 아니라 다른 언어에서도 접할 수 있는 것은 물론, 면접에서도 꼭 물어보는 질문입니다.
더 많은 프로그래밍 관련 지식을 보려면
프로그래밍 소개위 내용은 Node.js는 정말 단일 스레드인가요? 프로세스 간 통신 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!