[250220] TIL
오늘 한 일
Async/Await - 비동기/논블로킹 처리와 연관지어 이해할것
- Async/Await 는 비동기 작업을 동기적인 코드처럼 작성할 수 있게 해주면서도, 실제로는 논 블로킹 방식으로 동작하게 해주는 기능입니다.
- Async 는 promise 를 반환해주도록 약속되어있습니다. 비동기 작업을 처리한 후에 then, catch 등을 사용해서 흐름을 연결할 수 있습니다.
- Async 함수의 반환 값이 promise 가 아닌 경우 자동으로 래핑해서 반환됩니다.
- await 는 Async 함수 내부에서만 사용이 가능한데, promise가 완료될 때까지 기다리고 완료된 promise 결과를 반환합니다. → 위에서 말한 것 처럼 동기적 방식처럼 보임
- 비동기 작업을 더 직관적이고 동기적인 코드 흐름을 작성하기 위해서 사용됩니다.
자바스크립트 인터프리터
- 자바스크립트 인터프리터는 자바스크립트 엔진을 말하는데, 자바스크립트 코드를 읽고 자바스크립트 (고수준) 언어를 바이트 코드로 변환하는 작업을 합니다.
- 바이트 코드는 한 줄 한 줄 읽어지면서 실행 됩니다.
자바스크립트 엔진
- 요즘 자바스크립트 엔진은 단순한 인터프리터 역할도 하지만, 복잡한 최적화 과정을 포함하고 있습니다.
V8 엔진 내부 동작
- Parser → AST 로 변환
- Ignition (인터프리터) → 바이트 코드 생성
- 실행 및 프로파일링
- TurboFan ( JIT 컴파일러 ) > 최적화된 기계어 코드 생성, 필요시 최적화
JIT 컴파일러 역할
코드가 실행되는 시점에 기계어로 변환하는 컴파일러입니다.
- 코드 모니터링해서 자주 실행되는 코드 감지
- 최적화 컴파일
- 타입 특화
- 루프 최적화
- 디옵티마이제이션
→ 실행 속도 향상 시키고, 메모리 효율적으로 관리하고, 동적 최적화를 한다.
렉시컬 스코프 ( Lexical Scope )
- 렉시컬 스코프는 함수가 선언된 위치에 따라 상위 스코프가 결정되는 것을 말합니다.
- 즉, 함수를 어디서 선언하였는지에 따라 상위 스코프를 결정한다는 것이고, 호출이 아닌! 선언에 따라 결정된다는 것입니다.
스코프 체인
- 변수를 찾을 때 현재 스코프에서 시작하여 상위 스코프로 차례대로 검색해 나가는 것을 말합니다.
Leave a comment