ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 논블로킹 I/O
    JavaScript/Node.js 2019. 5. 26. 15:48

    함수를 백그라운드로 보내서 다음 코드를 우선 실행시킨 후,  백그라운드로 보낸 함수를 다시 태스크 큐로 보내 호출 스택으로 올라오는 방식을 '논블로킹 방식'이라고 표현한다.

    논블로킹이란 이전 작업이 완료될 때 까지 멈추지 않고 다음 작업을 수행하는 것을 의미한다.

    이러한 작업은 같은 작업을 블로킹 방식보다 더 짧은 시간에 처리할 수 있다는 장점이 있다.

    보통 이러한 작업은 I/O 처리를 할 때 시간적 이득을 볼 수 있다.

     

    코드를 통해 블로킹 방식과 논블로킹 방식을 비교해보자.

    function longTask() {
    	// 긴 작업
        console.log('작업 완료');
    }
    
    console.log('시작');
    longTask();
    console.log('끝');

    위의 코드를 실행했을 때, 콘솔에는 시작, 작업 완료, 끝 순으로 결과가 출력된다.

    이것이 블로킹 방식이며, 하나의 작업이 완료되기 전까지 다음 작업이 수행되지 않는다.

    즉 longTask()함수가 완료되기 전까지 console.log('완료') 코드는 수행되지 않는다는 것이다.

     

    다음은 논블로킹 방식의 코드이다.

    function longTask() {
    	// 긴 작업
        console.log('작업 완료');
    }
    
    console.log('시작');
    setTimeout(longTask, 0);
    console.log('끝');

    위의 코드를 수행하면 시작, 끝, 작업 완료 순으로 결과가 출력된다.

    이것이 논블로킹 방식이며, 하나의 작업이 수행 중임에도 다음 작업을 수행시킨다.

    setTimeout(콜백, 0);

    밀리초를 0으로 설정하는 경우 바로 수행되는 것이 아닌 각각의 엔진의 기본 설정에 따라 작동한다.

    HTML5 브라우저에서는 4ms의 지연 시간이 존재하고, Node.js에서는 1ms의 지연 시간이 있다.

     

     

     

    이 글은 다음과 같은 내용을 참고하여 공부한 챕터를 정리한 내용입니다.

    Node.js 교과서 - 길벗 출판사

    'JavaScript > Node.js' 카테고리의 다른 글

    Cross Origin 허용하기  (0) 2019.07.05
    싱글 스레드  (0) 2019.05.26
    이벤트 기반 (Event-Driven)  (0) 2019.05.25
    자바스크립트 런타임  (0) 2019.02.24
    Node.js란  (0) 2019.02.12
Designed by Tistory.