42. 비동기 프로그래밍

Jun_Gyu·2025년 3월 9일
0

한 발자국 더, JS

목록 보기
27/34
post-thumbnail

JS와 싱글 스레드

프로세스가 단일 스레드로 동작하는 방식으로, 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법임.

자바스크립트가 가장 대표적인 싱글 스레드 언어다.


동기 & 비동기 처리

동기 처리

  • 현재 실행중인 태스크가 종료가 될 때까지 다음 실행 태스크들이 대기하는 방식이며, 작업간 실행 순서가 보장됨.
  • 하지만, 태스크 처리 시간이 오래 걸리게 되면 후순위 태스크들이 블로킹되는 단점이 존재함.

비동기 처리

  • 현재 실행중인 태스크의 완료 여부와 관계없이 다음 태스크들을 곧바로 실행하는 방식이며, 블로킹 현상이 발생하지 않는것이 장점.
  • 하지만 작업간 실행 순서를 보장할 수 없으며, 콜백 지옥이 발생할 수 있다.
  • 대표적으로 setTimeout, HTTP 요청, 이벤트 헨들러는 비동기 처리 방식으로 동작.
  • 비동기 함수는 전통적으로 콜백 패턴을 사용.

JS 엔진

콜 스택

소스코드 평과 과정에서 생성된 실행 컨텍스트가 추가되고 제거되는 스택형 자료구조인 실행 컨텍스트 스택,

함수 호출시 함수 실행 컨텍스트가 순차적으로 콜스택에 푸시되어
이를 순차적으로 실행함.

자바스크립트 엔진은 하나의 콜스택만 사용하며,

최상위 실행 컨텍스트가 종료되어 콜스택에서 제거되기 전까지는
다른 어떤 태스크도 실행되지 않음.

객체가 저장되는 메모리 공간으로,
콜 스택의 요소인 실행 컨텍스트는 힙에 저장된 객체를 참조함.

객체는 원시값과 달리 크기가 정해지지 않기에
런타임에 동적할당 or 구조화가 이뤄지지 않음.


이벤트 루프 & 태스크 큐

이벤트 루프

콜 스택에 현재 실행중인 실행 컨텍스트가 있는지, 태스크 큐에 대기중인 함수가 있는지 반복해서 확인.

콜 스택이 비어있고 태스크 큐에 대기중인 함수가 있으면 순차적으로 태스크 큐에 대기중인 함수를 콜 스택으로 이동시킴.


태스크 큐

비동기 함수의 콜백 함수나 이벤트 핸들러가 일시적으로 보관되는 영역으로,

태스크 큐에 일시 보관된 함수들을 비동기 처리 방식으로 동작함.


자바스크립트 vs 브라우저

싱글 스레드 방식으로 동작하는 것은 브라우저가 아니라 브라우저에 내장된 자바스크립트 엔진이다.

※자바스크립트 엔진은 싱글 스레드,브라우저는멀티 스레드로 동작함!※

모든 자바스크립트 코드가 자바스크립트 엔진에서 싱글 스레드 방식으로 동작한다면 비동기가 사실상 불가능하기 때문!

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글