PHP (또는 Java / ASP.NET / Ruby) 기반 웹 서버에서 모든 클라이언트 요청은 새 스레드에서 인스턴스화됩니다. 그러나 Node.js에서 모든 클라이언트는 동일한 스레드에서 실행됩니다 (동일한 변수를 공유 할 수도 있습니다!) I / O 작업은 이벤트 기반이므로 기본 스레드 루프를 차단하지 않습니다.
내가 이해하지 못하는 것은 Node 작성자가 단일 스레드로 선택한 이유는 무엇입니까? 상황을 어렵게 만듭니다. 예를 들어, 메인 스레드를 차단하고 새로운 클라이언트 요청이 차단되므로 CPU 집약적 기능을 실행할 수 없으므로 프로세스를 생성해야합니다. 즉, 별도의 JavaScript 파일을 작성하고 다른 노드 프로세스를 실행해야합니다. 그것). 그러나 PHP에서 CPU 집중적 인 작업은 각 클라이언트가 다른 스레드에 있기 때문에 다른 클라이언트를 차단하지 않습니다. 멀티 스레드 웹 서버와 비교했을 때의 장점은 무엇입니까?
참고 :이 문제를 해결하기 위해 클러스터링을 사용했지만 그다지 좋지 않습니다.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!표시 합니다. 기본 이벤트 루프 는 단일 스레드이지만 그렇지 않은 경우에는 의미가 없습니다. 그러나 노드는 매우 다중 스레드이므로 원하는 경우 다중 스레드 단일 프로세스 응용 프로그램을 작성할 수 있습니다. 나는 그것에 대한 포괄적 인 답변을 작성하고 싶지만 어떤 사람들은 당신의 질문을 끝내기로 결정했습니다. 다시 열기로 투표하고 있습니다. 더 많은 표를 얻고 다시 열면 의견에 저를 언급하십시오.