[JS] 블로킹(Blocking)과 논블로킹(Non-Blocking)

eunseok·2023년 10월 18일
1

js공부

목록 보기
21/27

사실 처음 듣는 단어인데.. 면접 질문에 이 질문이 나왔다는 것을 듣고 한 번 찾아 보았습니다.

"Blocking"과 "Non-Blocking"은 프로그래밍에서 자주 사용되는 용어로, 특히 I/O 작업(파일 시스템 접근, 네트워크 요청 등)에 관련된 동작 방식을 설명하는 데 사용됩니다.

JavaScript는 기본적으로 단일 스레드(single-threaded) 언어로, 한 번에 하나의 작업만 처리할 수 있습니다. 그러나 JavaScript는 이벤트 루프와 콜백 함수를 사용하여 비동기(asynchronous) 동작을 지원하며, 이를 통해 논블로킹(non-blocking) 방식을 구현할 수 있습니다.

블로킹과 논블로킹

  • Blocking (블로킹) : JavaScript에서 블로킹 연산은 해당 연산이 완료될 때까지 실행 흐름을 멈춥니다. 예를 들어, alert() 함수는 브라우저에서 팝업 창이 닫힐 때까지 다른 코드의 실행을 막습니다.

  • Non-Blocking (논블로킹) : JavaScript에서 대부분의 I/O 작업(예: AJAX 요청, 타이머 함수 등)은 비동기적으로 동작하므로 논블로킹입니다. 이런 작업들은 즉시 완료되지 않아도 다음 코드가 실행됩니다. 예를 들어, setTimeout() 함수는 지정된 시간 후에 콜백 함수를 호출하지만, 그 사이에 다른 코드가 계속 실행됩니다.

console.log('Start');

setTimeout(function() {
    console.log('Timeout callback');
}, 2000);

console.log('End');

위 코드를 실행해보면 'Start'와 'End'가 출력되고 2초 후에 'Timeout callback'이 출력됩니다. 이런식으로 논블로킹 방식으로 코드를 처리할 수 있습니다.

"블로킹"과 "논블로킹"은 주로 I/O 작업이나 네트워크 요청 등의 동기적 혹은 비동기적 동작을 설명할 때 사용됩니다.

블로킹과 논블로킹의 장단점

  • 블로킹 방식은 구현하기 쉽고 직관적입니다. 하지만 단점으로는 I/O 작업 등 오래 걸리는 연산 중에 CPU가 유휴 상태가 되어 리소스 활용도가 낮아질 수 있다는 점입니다.

  • 논블로킹 방식은 이런 문제를 해결하며 여러 요청을 동시에 처리할 수 있어 효율적인 경우가 많습니다. 그러나 비동기 로직 처리와 에러 핸들링 등 복잡성 증가라는 단점도 가지고 있습니다.

0개의 댓글