차단 작업이 무엇인지 살펴 보겠습니다.
Hello Star Print를 10 초 동안 지연시키기 위해 Sleep () 방법을 시뮬레이션합니다.
requestHandlers.js
코드 사본은 다음과 같습니다.
함수 start () {
Console.log ( "요청 핸들러 '시작'이 호출되었습니다.");
기능 수면 (밀리 초) {
var starttime = new date (). gettime ();
while (new date (). gettime () <starttime + millionseconds);
}
수면 (10000);
"Hello Start"를 반환합니다.
}
함수 upload () {
Console.log ( "요청 처리기 '업로드'가 호출되었습니다.");
"안녕하세요 업로드"를 반환합니다.
}
Exports.start = 시작;
Exports.upload = 업로드;
요청 /시작시 인쇄하기 전에 10 초가 지연되었습니다.
요청/업로드시 영향을받지 않습니다.
다음으로 실험을 수행하십시오.
http : // localhost : 8888/첫 번째 브라우저 창의 주소 표시 줄에서 시작하지만 먼저 열지 마십시오!
http : // localhost : 8888/두 번째 브라우저 창의 주소 막대에 업로드를 입력하십시오. 마찬가지로 먼저 열지 마십시오!
첫 번째 창 ( "/start")에서 Enter를 누르고 두 번째 창 ( "/업로드")으로 빠르게 전환하고 Enter를 누릅니다.
무슨 일이 있었는지 :
/start URL은로드하는 데 10 초가 걸렸으며, 이는 예상과 동일했습니다.
/업로드 URL은 실제로 10 초가 걸렸습니다!
그러나 해당 요청 핸들러에서 sleep ()와 유사한 작업이 없습니다. 문제는 무엇입니까?
그 이유는 start ()에 차단 작업이 포함되기 때문입니다. 생생하게 말하면 "다른 모든 처리 작업을 차단합니다."
Node.js는 단일 스레드이며 추가 스레드를 추가하지 않고도 병렬로 작업을 처리 할 수 있습니다.
이벤트 루프를 통한 병렬 작업을 구현하고이를 최대한 활용해야합니다. 대신 가능한 한 많이 차단하는 것을 피하고 대신 비 블로킹 작업을 더 자주 사용하십시오.
다음 섹션에서는 비 차단 작업을 구현하는 방법을 소개합니다.