[250220] TIL

오늘 한 일

Async/Await - 비동기/논블로킹 처리와 연관지어 이해할것

  • Async/Await 는 비동기 작업을 동기적인 코드처럼 작성할 수 있게 해주면서도, 실제로는 논 블로킹 방식으로 동작하게 해주는 기능입니다.
  • Async 는 promise 를 반환해주도록 약속되어있습니다. 비동기 작업을 처리한 후에 then, catch 등을 사용해서 흐름을 연결할 수 있습니다.
  • Async 함수의 반환 값이 promise 가 아닌 경우 자동으로 래핑해서 반환됩니다.
  • await 는 Async 함수 내부에서만 사용이 가능한데, promise가 완료될 때까지 기다리고 완료된 promise 결과를 반환합니다. → 위에서 말한 것 처럼 동기적 방식처럼 보임
  • 비동기 작업을 더 직관적이고 동기적인 코드 흐름을 작성하기 위해서 사용됩니다.

자바스크립트 인터프리터

  • 자바스크립트 인터프리터는 자바스크립트 엔진을 말하는데, 자바스크립트 코드를 읽고 자바스크립트 (고수준) 언어를 바이트 코드로 변환하는 작업을 합니다.
  • 바이트 코드는 한 줄 한 줄 읽어지면서 실행 됩니다.

자바스크립트 엔진

  • 요즘 자바스크립트 엔진은 단순한 인터프리터 역할도 하지만, 복잡한 최적화 과정을 포함하고 있습니다.

V8 엔진 내부 동작

  1. Parser → AST 로 변환
  2. Ignition (인터프리터) → 바이트 코드 생성
  3. 실행 및 프로파일링
  4. TurboFan ( JIT 컴파일러 ) > 최적화된 기계어 코드 생성, 필요시 최적화

JIT 컴파일러 역할

코드가 실행되는 시점에 기계어로 변환하는 컴파일러입니다.

  1. 코드 모니터링해서 자주 실행되는 코드 감지
  2. 최적화 컴파일
  3. 타입 특화
  4. 루프 최적화
  5. 디옵티마이제이션

→ 실행 속도 향상 시키고, 메모리 효율적으로 관리하고, 동적 최적화를 한다.

렉시컬 스코프 ( Lexical Scope )

  • 렉시컬 스코프는 함수가 선언된 위치에 따라 상위 스코프가 결정되는 것을 말합니다.
  • 즉, 함수를 어디서 선언하였는지에 따라 상위 스코프를 결정한다는 것이고, 호출이 아닌! 선언에 따라 결정된다는 것입니다.

스코프 체인

  • 변수를 찾을 때 현재 스코프에서 시작하여 상위 스코프로 차례대로 검색해 나가는 것을 말합니다.

Categories:

Updated:

Leave a comment