스레드 풀 사용시기 및 사용자 :
먼저 컴퓨터에 Node를 사용 / 설치하면 컴퓨터의 노드 프로세스라고하는 다른 프로세스 중에서 프로세스를 시작하고 사용자가 죽일 때까지 계속 실행됩니다. 이 실행 프로세스는 소위 단일 스레드입니다.
따라서 단일 스레드의 메커니즘으로 인해 노드 애플리케이션을 쉽게 차단할 수 있지만 이것은 Node.js가 테이블에 제공하는 고유 한 기능 중 하나입니다. 따라서 노드 애플리케이션을 다시 실행하면 단일 스레드에서만 실행됩니다. 동시에 애플리케이션에 액세스하는 사용자가 1 백만 명이든 백만 명이든 상관 없습니다.
이제 노드 애플리케이션을 시작할 때 nodejs의 단일 스레드에서 일어나는 일을 정확히 이해합시다. 처음에 프로그램이 초기화 된 다음 모든 최상위 코드가 실행됩니다. 즉, 콜백 함수 내에없는 모든 코드가 실행됩니다 (모든 콜백 함수 내의 모든 코드가 이벤트 루프에서 실행된다는 것을 기억하십시오 ).
그 후 실행 된 모든 모듈 코드가 모든 콜백을 등록하고 마지막으로 애플리케이션에 대한 이벤트 루프가 시작됩니다.
따라서 모든 콜백 함수와 해당 함수 내의 코드가 이벤트 루프에서 실행되기 전에 논의했듯이. 이벤트 루프에서 부하는 여러 단계로 분산됩니다. 어쨌든 여기서 이벤트 루프에 대해 논의하지 않을 것입니다.
스레드 풀을 더 잘 이해하기 위해 이벤트 루프에서 하나의 콜백 함수 내부의 코드가 다른 콜백 함수 내부의 코드 실행을 완료 한 후 실행되는 것을 상상해 보라고 요청합니다. 이제 일부 작업이 실제로 너무 무겁다면. 그런 다음 nodejs 단일 스레드를 차단합니다. 그래서 이벤트 루프와 같은 스레드 풀이 libuv 라이브러리에 의해 Node.js에 제공되는 곳입니다.
따라서 스레드 풀은 nodejs 자체의 일부가 아니며 libuv에 의해 제공되어 무거운 업무를 libuv에 오프로드하고 libuv는 해당 코드를 자체 스레드에서 실행하고 실행 후 libuv는 이벤트 루프의 이벤트에 결과를 반환합니다.
스레드 풀은 기본 단일 스레드와 완전히 별 개인 4 개의 추가 스레드를 제공합니다. 그리고 실제로 최대 128 개의 스레드를 구성 할 수 있습니다.
따라서이 모든 스레드가 함께 스레드 풀을 형성했습니다. 그러면 이벤트 루프가 자동으로 무거운 작업을 스레드 풀로 오프로드 할 수 있습니다.
재미있는 부분은이 모든 것이 장면 뒤에서 자동으로 발생한다는 것입니다. 스레드 풀로 이동하는 것과 그렇지 않은 것을 결정하는 것은 우리 개발자가 아닙니다.
스레드 풀에는 다음과 같은 많은 작업이 있습니다.
-> All operations dealing with files
->Everyting is related to cryptography, like caching passwords.
->All compression stuff
->DNS lookups