JavaScript 블로킹 & 논블로킹

Jemin·2023년 6월 30일
0

프론트엔드

목록 보기
32/51

Blocking & Non-blocking

JavaScript에서 블로킹(Blocking)논블로킹(Non-blocking)은 코드 실행과 관련된 동작을 설명하는 용어다.

블로킹(blocking)

블로킹은 한 작업이 완료되기 전까지 다음 작업이 실행되지 않는 상태를 의미한다.

블로킹 작업은 해당 작업이 완료될 때까지 프로그램의 실행이 중단된다. 이러한 동작은 일반적으로 동기적인 코드 실행에서 발생하며, I/O 작업이나 긴 계산 작업 등이 해당된다. 예를 들어, 파일을 읽거나 데이터베이스에서 데이터를 조회하는 작업은 해당 작업이 완료될 때까지 프로그램의 실행이 중단될 수 있다.

논블로킹(Non-blocking)

논블로킹은 한 작업의 완료 여부와 상관없이 다음 작업이 실행되는 상태를 의미한다.

논블로킹 작업은 비동기적인 코드 실행에서 주로 발생하며, 작업이 완료되기를 기다리지 않고 다음 작업을 실행한다. 이를 통해 여러 작업을 동시에 처리하거나 다른 작업을 수행하는 동안 대기 시간을 최소화할 수 있다. 예를 들어, Ajax 요청이나 타이머를 사용한 비동기 작업은 일반적으로 논블로킹 작업에 해당한다.

JavaScript 단일 스레드

JavaScript는 기본적으로 단일 스레드(Single-threaded)로 동작하기 때문에 블로킹 작업이 실행되는 동안 다른 작업은 실행되지 않는다. 따라서 블로킹 작업이 오래 걸리는 경우 전체 애플리케이션이 응답하지 않는 현상이 발생할 수 있다.

이를 해결하기 위해 JavaScript에서는 비동기 작업과 이벤트 처리를 통해 논블로킹 동작을 구현한다. 비동기 작업은 작업이 완료되는 것을 기다리지 않고 다음 코드를 실행하며, 작업이 완료되면 콜백 함수를 호출하여 결과를 처리한다.

논블로킹 방식은 비동기 코드를 사용하여 동시에 여러 작업을 처리하고, 작업의 완료를 기다리지 않고 다음 코드를 실행하여 프로그램의 응답성과 성능을 향상시킬 수 있다.

참고
블로킹 Vs. 논블로킹, 동기 Vs. 비동기

profile
꾸준하게

0개의 댓글