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
'IT TIP' 카테고리의 다른 글
ASP.NET 컨트롤에 해당하는 HTML 태그 (0) | 2020.12.07 |
---|---|
치명적인 오류 : 정의되지 않은 함수 mb_strlen () 호출 (0) | 2020.12.07 |
"ui-sref"를 조건부로 실행하는 방법은 무엇입니까? (0) | 2020.12.07 |
dplyr의 mutate_each / summarise_each : 특정 열을 선택하고 변경된 열에 새 이름을 지정하는 방법은 무엇입니까? (0) | 2020.12.07 |
if 문 다음에 나오는 변수 선언 (0) | 2020.12.07 |