작성
·
641
0
노드 공부 중에 너무 헷갈려서 조심스레 질문 올려봅니다.
질문은 맨 밑에 써있습니다.
nodejs 가 비동기 IO를 처리해주는 놈
보통 비동기작업이 발생하면 Libuv에 작업을 위임하고 그작업 내부에서 커널을 이용하거나 커널로 할수 없는 경우 libuv 가 자체적으로 운용하는 thread_pool 내부 thread 이용해서 (기본 4개 ) 작업 처리후 이벤트 리스너 내부 각 틱에 맞는 큐에 전달하고 메인 쓰레드 가 이벤트 루프를 돌면서 적절하게 콜백으로 실행한다.
노드에서 멀티 쓰레드 방식으로 작업 처리
구글링을 통해 찾은 그림으로 봐서는 노드도 한 실행 프로세스 내부에서 다른 프로그래밍 언어처럼 멀티 쓰레드를 사용한 것 처럼 보입니다.
본래 메인 쓰레드 가 하나 이기 때문에 노드는 싱글쓰레드 기반이라고 하는데 ,
만약 그림이 맞다면 이걸 깨고 메인 쓰레드를 여러개로 사용하겠다고 이해했습니다.
여기서 너무 햇갈립니다.
일단 저는 두개는 다르다고 이해했습니다.
worker_thread 를 이용해서 쓰레드를 추가한 행위는 메인 쓰레드를 여러개 사용하겠다는 의미 이고
libuv 는 자체적으로 운용하는 쓰레드 풀 이다.
저는 일단 아니라고 생각 합니다.. 그렇다면 thread_pool 도 3개가 생성되고 .. 이러면 너무 무서울것 같습니다. (그럼 만약 thread_pool 제한을 128개로 풀어버리고 worker_thread 를 8개 만들면 ㄷ ㄷ ㄷ )
아마 가상적으로 격리시킨다고 이해했습니다.. 결국 (v8엔진과 libuv 는 한개다.. )
https://stackoverflow.com/questions/61328960/when-is-better-using-clustering-or-worker-threads
좀더 찾아본 바로는 별개 의 것으로 있는것 같네요 ㅠ
그럼 정말 3개의 worker_thread 를 사용하면 각 v8 엔진과 libuv 도 생성되나요?
틀린 부분이나 오개념 지적 부탁드립니다 ㅠㅠ