https://velog.io/@ajm0718/JavaScript-블로킹-논블로킹

코드 실행과 관련된 동작

블로킹(blocking)

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

Untitled

논블로킹(Non-blocking)

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

Ajax 요청이나 타이머를 사용한 비동기 작업은 일반적으로 논블로킹 작업에 해당

Untitled

웹 브라우저의 파일 다운로드가 비동기 논블로킹을 활용하는 예시 라고 할 수 있다. 웹 브라우저는 웹 사이트에서 파일을 다운로드할 때, 파일의 전송이 완료될 때까지 다른 작업을 하지 않고 기다리는 것이 아니라, 다른 탭이나 창을 열거나 웹 서핑을 할 수 있다. 이는 웹 브라우저가 파일 다운로드를 비동기적으로 처리하고, 콜백 함수를 통해 다운로드가 완료되면 알려주는 방식으로 구현되어 있기 때문이다.

Untitled

JavaScript 단일 스레드

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

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

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