241105 동기 & 비동기

수달·2024년 11월 5일

1. 동기와 비동기

https://ljtaek2.tistory.com/142
https://ljtaek2.tistory.com/129?category=897337

1.1 동기

  • 싱글 스레드를 가지고 있는 언어 (작업장이 1개)

1.2 비동기

  • 문법 -> 브라우저의 자바스크립트 엔진
    자바스크립트는 기본적으로 동기지만 비동기로 가능

2. 자바스크립트 엔진

2.1 일반적인 자바스크립트 엔진

2.2 웹 브라우저에 탑재되어있는 자바스크립트 엔진

-> 이벤트 루프(태스크 큐)

  • 크롬: V8 엔진
  • 사파리: 자바스크립트코어 엔진

3. 대표적인 비동기 함수

3.1 setTimeout()

  • 브라우저에서 제공하는 API (web API)

실행 컨텍스트 & 콜스텍

  • 실행 컨텍스트 & 콜 스택:
    실행 컨텍스트는 자바스크립트 코드가 실행될 때 함수마다 만들어지는 환경. 함수가 호출될 때마다 실행 컨텍스트가 만들어지고 콜 스택에 쌓임. 코드 실행이 끝나면 해당 실행 컨텍스트는 콜 스택에서 제거.

  • 가비지 컬렉션:
    자바스크립트는 메모리를 자동으로 관리하는 가비지 컬렉터를 가지고 있음. 참조 관계가 없는 메모리(더 이상 사용되지 않는 변수나 함수 등)는 자동으로 가비지 컬렉션에 의해 메모리가 해제.

  • 참조 관계가 있는 경우 (클로저):
    클로저는 함수가 외부 함수의 변수에 접근할 수 있도록 참조를 유지하는 메커니즘. 실행 컨텍스트가 종료되어도 클로저에 의해 변수 참조가 유지되면 가비지 컬렉션에서 제거되지 않고 남아 있음.

  • 예를 들어, 내부 함수가 외부 함수의 변수를 참조하는 경우, 외부 함수가 종료되어도 내부 함수가 그 변수를 계속 사용할 수 있기 때문에 메모리가 해제되지 않음.

  • 💫
    실행컨텍스트에서 모든 코드가 전부 실행되었을 때
    그 실행 컨텍스트는 풀스택에서 제거가 됨
    참조 관계가 없으면 가비지 컬렉션
    참조 관계가 있으면 가비지 컬렉션 예외 (클로저)

Promise -> 약속(?)

  • 비동기 함수 호출을 제어할 수 있는 패턴 중 하나

Producer vs Consumer

  • Producer(생산자):
    비동기 작업을 실행하는 코드
    비동기 작업 실행 코드의 상태

  • Consumer(소비자):
    Promise의 결과를 소비하는 코드를 의미

pending, fullfiled, rejected

  • pending:
    코드가 실행되었으나 응답은 오지 않은 상태

  • fullfiled(이행):
    코드가 성공적으로 실행된 상태

  • rejected(거부):
    코드가 실패한 상태

0개의 댓글