차단 작업이 무엇인지 살펴보겠습니다.
안녕하세요 별 인쇄를 10초 동안 지연시키는 sleep() 메서드를 시뮬레이션합니다.
requestHandlers.js
/start를 요청하면 인쇄되기까지 10초 정도 지연이 발생합니다.
요청/업로드 시 영향을 받지 않습니다.
실험을 해보자:
첫 번째 브라우저 창의 주소 표시줄에 http://localhost:8888/start를 입력하고 아직 열지 마세요!
두 번째 브라우저 창의 주소 표시줄에 http://localhost:8888/upload를 입력하세요. 아직 열지 마세요.
첫 번째 창("/start")에서 Enter를 누른 다음 빠르게 두 번째 창("/upload")으로 전환하고 Enter를 누릅니다.
주의하세요, 무슨 일이 일어났는지:
/start URL을 로드하는 데 10초가 걸렸는데, 이는 우리가 예상했던 것입니다.
/업로드 URL도 10초 걸렸습니다!
예, 해당 요청 핸들러에 sleep()과 유사한 작업이 없습니다. 무엇이 문제인가요?
이유는 start()에 차단 작업이 포함되어 있기 때문입니다. 비유적으로 말하면 "다른 모든 처리 작업을 차단합니다."
Node.js는 단일 스레드이며 추가 스레드를 추가하지 않고도 작업을 병렬로 처리할 수 있습니다.
이벤트 루프를 통해 병렬 작업을 구현합니다. 이를 최대한 활용해야 합니다. 차단 작업을 최대한 피하고 대신 비차단 작업을 사용하세요.
다음 섹션에서는 비차단 작업을 구현하는 방법을 소개하겠습니다.