[기술면접/JS] Blocking / Non-Blocking

강민혁·2023년 2월 27일
0

기술면접 | JS

목록 보기
5/17

JS에서 Blocking / Non-Blocking에 대해 설명하세요

Keyword

single thread, blocking, non-blocking, 입출력 작업, 제어권, blocking sync, non-blocking async, 이벤트 루프


Script

먼저 JS 엔진은 single thread로 동작하기 때문에, 동시성 문제를 겪을 수 있습니다. 이 때 알아야하는 개념이 blocking과 non-blocking 개념이라고 생각합니다.

JS에서 Blocking은, 입출력 작업 등이 수행될 때 JS의 다른 작업이 수행될 수 없도록 해당 작업이 연산 제어권을 가져갑니다. 반면, Non-Blocking은 같은 상황에서 JS에서 연산 제어권을 가지고 있습니다.

그래서 예를 들어 웹서버에 요청을 보내고 Database 입출력 작업과 같은 작업을 수행한다고 가정해보겠습니다. 이때, 만약 이 작업을 blocking sync 로 수행하면, 해당 작업이 완료되는 동안 다른 작업을 할 수 없습니다. 즉, 이벤트 루프가 Blocking 작업을 수행하는 동안 JS가 다른 일을 처리할 수 없습니다.

하지만 non-blocking async 로 수행하면, 해당 작업이 완료되는 동안 다른 작업을 수행할 수 있게 됩니다.


Additional

sync/async와 blocking/non-blocking의 차이

sync/async프로세스의 수행 순서 보장에 대한 매커니즘이고, blocking/non-blocking프로세스의 유휴 상태에 대한 개념이라는 차이가 있다.

sync/async는 처리해야 할 작업들을 어떠한 흐름으로 처리할 것인가에 대한 관점으로, 특정 작업의 완료 여부에 따른 실행 순서를 어떻게 가져갈 것인가에 대한 개념이다. 즉, 코드의 실행 순서의 시각에서 바라보는 로직 처리의 개념이라고 할 수 있겠다.

반면, blocking/non-blocking은 특정 작업이 전체 작업의 흐름을 막는지의 여부를 논하는 개념으로, 작업 제어권의 소유에 중점을 둔다. 즉, 작업 제어권을 어디에서 소유하고 있는지의 측면에서 바라보는 개념이다.

Reference

BOOK - modern javascript deep dive

동기 & 비동기 / 블로킹 & 논블로킹 💯 완벽 이해하기

Node.js 공식문서 - 블로킹과 논블로킹 살펴보기

profile
with programming

0개의 댓글