Non-blocking 과 Asynchronous

·2023년 3월 23일
0

개발 지식

목록 보기
51/96
post-thumbnail

Blocking / Non-Blocking : 제어권의 차이

Blocking

두개 이상의 입출력 작업이 진행되는 경우, 후행의 작업이 끝날 때 까지 후행에서 제어권을 유지한다. 제어권이 다시 선행 작업으로 돌아왔을 때 남은 작업을 진행한다.

Non-Blocking

두개 이상의 입출력 작업이 진행되는 경우, 후행의 작업이 시작되어도, 선행이 제어권을 유지한다. 후행의 진행과정에서도 선행도 작업을 진행한다.

Synchronous / Asynchronous : 결과의 차이

Synchronous

두개 이상의 입출력 작업이 시작되면 해당 작업이 완료될 때까지 대기하며, 결과를 반환한다. 선행의 작업은 후행의 작업이 완료될 때 까지 계속 신경을 쓰고 있는 상태가 된다.

Asynchronous

두개 이상의 입출력 작업이 시작되면, 해당 작업이 완료되기를 기다리지 않고 다른 작업을 실행한다. 작업이 완료되는 경우, 선행의 작업에게 작업이 완료되었음을 응답한다. 그렇기 때문에 선행 작업은 후행 작업에 대해 신경 쓰지 않아도 된다.

결론

동작 방식이 비슷한 점이 있으나, Non-blocking 과 Asynchronous는 서로 관점의 차이가 있다. 두 작업은 서로 상호 배타적이지 않으며, 함께 사용하는 것이 가능하다. 즉 Non-blocking 작업은 Asynchronous 하면서, synchronous 할 수 있고, Asynchronous 작업이 Non-blocking 하면서, blocking 할 수도 있다.

💡 Node.js 의 특징으로 말하는 입출력에 대한 Non-blocking 특징은 readFile 에 함수에 대한 이야기 이다. readFile 함수는 기본적으로 파일 입출력에 대한 처리를 Non-blocking 로 처리하며, 콜백함수와 함께 사용되는 경우, Asynchronous 와 Non-blocking 이 함께 사용되는 예시라고 할 수 있다.

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글