-
[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 댓글