IT TIP

NodeJS는 정말 단일 스레드입니까?

itqueen 2020. 12. 7. 21:23
반응형

NodeJS는 정말 단일 스레드입니까?


Node.js는 스레드 대신 이벤트 루프를 사용하여 이벤트 기반 모델을 핵심에 배치함으로써 "연결 당 하나의 스레드 문제"를 해결합니다. 비용이 많이 드는 모든 I / O 작업은 시작된 작업이 완료 될 때 실행되는 콜백과 함께 항상 비동기 적으로 실행됩니다.

연산이 발생하면 관찰은 epoll ()과 같은 다중화 메커니즘에 의해 처리됩니다.

내 질문은 다음과 같습니다.

  • 차단 Systemcalls select / epoll / kqueue를 사용하는 동안 NodeJS가 차단하지 않는 이유는 무엇입니까?

  • 아니면 NodeJS 단일 스레드가 아니므
    로 select / epoll / kqueue로 모든 I / O 작업을 관찰하려면 두 번째 스레드가 필요합니까?


NodeJS는 단일 스레드 아니라 이벤트 ( 웹 사이트의 두 번째 줄 )입니다. 사용자가 명시 적으로 관리 할 필요없이 select / epoll / kqueue 처리를 수행하는 데 필요한 스레딩을 내부적으로 처리하지만 내부적으로 스레드 사용이 없음을 의미하지는 않습니다.


아니.

I / O 작업이 시작되면 자체 (다중 스레드, 비동기) 환경을 사용하여 요청을 관리하는 libuv에 위임됩니다 . libuv는 I / O 작업의 완료를 알립니다.이 이벤트를 기다리는 모든 콜백이 실행을 위해 메인 V8 스레드에 다시 도입 될 수 있도록합니다.

V8- > I / O 위임 ( libuv )-> 스레드 풀-> 다중 스레드 비동기


JavaScript는 단일 스레드이므로 이벤트 모델도 마찬가지입니다. 그러나 노드 스택은 단일 스레드가 아닙니다.

Node는 동시성을 위해 V8 엔진을 사용합니다.

참고 URL : https://stackoverflow.com/questions/7018093/is-nodejs-really-single-threaded

반응형