임원에 대한 이해가 거의 정확합니다. 내 관심사는 그렇게 할 필요가 없을 때 사용하는 것입니다 ... 질문에서 입/출력 유형에 대해서만 언급합니다. 그것은 일을하는 단일 스레드 이벤트 모델입니다. 싱글 스레드 임에도 불구하고, 이벤트 모델은 메인 이벤트 루프를 차단하지 않고 코드를 실행할 수있게 해줍니다 (CPU 요청이 많은 작업 ... 데이터베이스 요청 및 파일 처리가 포함되지 않은 경우 제외). 원하는 것을하기 위해 추가 dyno를 시작할 필요가 없습니다.
dyno를 단일 프로세서 컴퓨터라고 생각하십시오. 단일 프로세서를 갖춘 컴퓨터에서 수행 할 수있는 작업은 무엇이든 추가 요금이나 dynos없이 dyno에서 수행 할 수 있습니다. 그러나 dyno는 단일 코어 프로세서 컴퓨터가 활용할 수있는 것보다 훨씬 적은 메모리를 가지고 있습니다. 따라서 스폰하려는 하위 프로세스는 다른 dyno를 실행할 필요가 없습니다. 실행할 마스터 프로세스마다 자체 dyno가 필요합니다.
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('An amount of data that will take 1 second to send');//This will not block the event loop
}).listen(1337, '127.0.0.1');
var http = require('http');
http.createServer(function (req, res) {
while(true) {
break after 1 second; //this will block the event loop for 1 second
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
위의 코드에서 두 서버를 고려하십시오. 두 서버 모두 약 1 초의 작업이 필요합니다. 첫 번째 예제는 초당 수천 개의 요청을 처리 할 수 있습니다. 두 번째 예제는 1입니다. 데이터, 데이터베이스 요청, 서버 요청, 파일 IO 등을 보내는 것은 모두 첫 번째 예제처럼 작동합니다. 노드의 동작은 거의 없습니다. 두 번째 예. 두 번째 예제에 맞는 것을 가지고 있다면, 다른 언어를 선택하는 것이 노드 설계를 잘못 설계 한 유스 케이스에 대해 강제로 작동하도록하는 것보다 낫다.
데이터베이스 요청과 파일 처리를 비동기 적으로 수행하기 위해 별도의 노드 프로세스를 시작하지 않아도됩니다. 그렇게하지 않으면 nodejs의 이점이 있습니다. 비 결정적 인 작업자 "스레드/프로세스"를 생성하는 경우 NodeJS를 잘못 사용하게됩니다. 그리고 그 대답으로, 나는 당신이 당신 자신의 질문에 대답 할 수 있어야한다고 생각합니다. 더 자세히 알고 싶다면 알려주세요! – ChrisCM
귀하의 회신에 감사드립니다, 크리스. 나 자신을 제대로 설명하지 못했을 수도 있습니다. 노드 지식은 Node Beginner 책에 자세히 나와 있지 않습니다. 예제에서는'var exec = require ("child_process"). exec;'를 사용합니다. 비 블로킹 (non-blocking) 코드를 보여주기 위해 값 비싼 쉘 연산을 수행 할 때'exec' 함수를 사용합니다. 따라서 이해할 수 있듯이이 예제에서는 셸 작업을 다른 프로세스로 연기하여 주 프로세스가 계속 새 요청을 받아서 초기 요청의 응답을 표시하는 콜백을 수신 할 수 있도록합니다. – mibbler
답변으로 내 의견을 제출했습니다. – ChrisCM