• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

worker_thread ?? libuv thread??

22.10.29 15:01 작성 조회수 505

0

노드 공부 중에 너무 헷갈려서 조심스레 질문 올려봅니다.

질문은 맨 밑에 써있습니다.

Libuv

  • nodejs 가 비동기 IO를 처리해주는 놈

보통 비동기작업이 발생하면 Libuv에 작업을 위임하고 그작업 내부에서 커널을 이용하거나 커널로 할수 없는 경우 libuv 가 자체적으로 운용하는 thread_pool 내부 thread 이용해서 (기본 4개 ) 작업 처리후 이벤트 리스너 내부 각 틱에 맞는 큐에 전달하고 메인 쓰레드 가 이벤트 루프를 돌면서 적절하게 콜백으로 실행한다.

worker_thread

  • 노드에서 멀티 쓰레드 방식으로 작업 처리

 

스크린샷 2022-10-29 오후 2.44.05.png

구글링을 통해 찾은 그림으로 봐서는 노드도 한 실행 프로세스 내부에서 다른 프로그래밍 언어처럼 멀티 쓰레드를 사용한 것 처럼 보입니다.

본래 메인 쓰레드 가 하나 이기 때문에 노드는 싱글쓰레드 기반이라고 하는데 ,

만약 그림이 맞다면 이걸 깨고 메인 쓰레드를 여러개로 사용하겠다고 이해했습니다.

여기서 너무 햇갈립니다.

질문 1 : worker_thread 를 통해 생성한 쓰레드랑 Libuv 에서 관리하는 thread pool 안에 쓰레드랑 같은 개념인가요?

일단 저는 두개는 다르다고 이해했습니다.

worker_thread 를 이용해서 쓰레드를 추가한 행위는 메인 쓰레드를 여러개 사용하겠다는 의미 이고

libuv 는 자체적으로 운용하는 쓰레드 풀 이다.

질문 2 : 만약 둘이 다르다면 worker_thread 를 3개 생성하면 libuv 에 쓰레드는 12개가 생성되나요?

저는 일단 아니라고 생각 합니다.. 그렇다면 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 도 생성되나요?

 

틀린 부분이나 오개념 지적 부탁드립니다 ㅠㅠ

답변 1

답변을 작성해보세요.

0

아뇨 둘다 메인쓰레드랑 다른 쓰레드를 추가로 생성해서 사용하는 겁니다.

워커쓰레드랑 libuv도 별개입니다. 쓰레드가 별개로 생성됩니다