긴 이야기를 짧게 말하면 대답은 '예'입니다. 이 루프가 실행되는 동안 수신 한 모든 요청은 대기열에 추가됩니다. 자녀 프로세스를 사용하여 부모 코드를 잠금 해제하십시오. 머신이 멀티 코어 여야합니다 (프로세스를 생성하는 것이 아니라 효율적이어야 함).
긴 이야기 :
JavaScript (및 결과적으로 Node)는 단일 스레드입니다. 이 질문의 맥락에서 의미하는 바-루프를 실행하는 동안 다른 함수를 호출 할 수 없습니다. 차단을 해제하는 유일한 방법은 자식 프로세스를 사용하는 것입니다. 두 가지 옵션이 있으며 각각 고유 한 강점과 결점이 있습니다.
- 클러스터를 실행하여 한 노드 프로세스가 "차단"되는 동안 수신 요청을 처리 할 다른 프로세스를 갖도록합니다.
- 무거운 것을 실행하기 위해 자식 프로세스를 생성 한 다음 결과를 다시보고하십시오.
첫 번째 옵션은 매우 간단하며 http://nodejs.org/api/cluster.html 클러스터에 서버를 래핑해야합니다. 그러나 각 노드 프로세스 내에서 실행되는이 루프로 전체 클러스터를 "차단"할 가능성이 있습니다.
두 번째 옵션은 구현하기가 더 복잡하고 더 많은 리소스가 필요합니다. 그러나 매우 무겁거나 잠재적으로 메모리 누수를해야 할 때 놀랍습니다. 이를 통해 할 수있는 것은 별도의 노드 프로세스를 생성하고 (RAM이 필요하고 시작하는 데 몇 밀리 초가 걸리므로 수백만 명의 사용자를 생성 할 수 없음) 인수를 전달하고 결과가 나올 때까지 기다리는 것입니다. 귀하의 부모 프로세스는 향후 요청을 처리 할 수 있습니다. 그러나 일단 완료되면 자식 프로세스를 죽이는 것을 잊지 마십시오. http://nodejs.org/api/child_process.html
무엇을 선택하든 동일한 시스템에서 여전히 실행 중이며 다음에 발생하는 병목 현상은 시스템 리소스입니다. 어쨌든 몇 가지 벤치 마크를 실행하십시오. 백 개 이상의 항목을 반복하는 것은 자식을 생성하기에는 그리 무겁지 않지만 수천 개 이상을 반복하면? ...
ps 반전 된 루프는 훨씬 빠르게 실행됩니다.
for (var i = results.length; i > 0; i--) {
//Do something
};
출처
https://stackoverflow.com/questions/22006907