ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] 동기와 비동기, 블로킹과 논블로킹
    언어/Node.js 2020. 4. 1. 17:19

    Blocking I/O  VS  NonBlocking I/O


    호출되는 함수가 바로 리턴하느냐 마느냐의 차이


    Blocking I/O


    호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만든다.

     

     

    NonBlocking I/O


    호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 줄 수 있다.

     

     

     

     

     

    동기(Synchronous) / 비동기(Asynchronous)


    Synchronous/Asynchronous는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐의 차이

     

     

    동기(Sync)


    호출하는 함수가 호출되는 함수의 작업 완료 후 리턴을 기다리거나, 또는 호출되는 함수로부터 바로 리턴 받더라도 작업 완료 여부를 호출하는 함수 스스로 계속 확인하며 신경쓴다.

     

    console.log('1');
    console.log('2');
    console.log('3');
    
    /* 출력 결과
    1
    2
    3
    */

     

     

     

    비동기(Async)


    호출되는 함수에게 callback을 전달해서, 호출되는 함수의 작업이 완료되면 호출되는 함수가 전달받은 callback을 실행하고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않는다.

     

    빠른 처리가 가능하지만 1번 처리가 리턴하는 값으로 2번처리를 해야할 때 문제가 발생한다.

     

    이때, 순차적인 작업을 실행하기 위해 콜백함수 안에 콜백함수를 또 삽입하다가 Callback hell이 발생하게 된다.

     

     

    function foo() {
      console.log('1');
    }
     
    setTimeout(foo, 2000);
    console.log('2');
    console.log('3');
    
    /* 출력 결과
    2
    3
    1
    */

     

     

     

     

     

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

    Node.JS & Express 프로젝트 설치  (0) 2020.04.02
    [Node.js] 구조 및 동작 원리  (0) 2020.04.01
    [Node.js] 특징 및 장단점  (4) 2020.04.01

    댓글

Designed by black7375.