JavaScript

비동기 프로그래밍

Hun-bot 2022. 7. 10. 20:14
728x90
반응형

동기 처리와 비동기 처리

자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다

-> 함수를 실행할 수 있는 창구가 단 한개 -> 동시에 2개 이상의 함수를 실행 X

 자바스크립트 엔진은 한 번에 하나의 태스크만 실행할 수 있는 싱글 스레드

싱글 스레드는 한 번에 하나의 태스크만 실행할 수 있다-> 처리에 시간이 걸리는 태스크를 실행하는 경우 블로킹이 발생

 

[!] 브라우저에 내장된 자바스크립트의 엔진이 싱글 스레드이고 브라우저는 멀티 스레드로 동작함 

만약, 모든 자바스크립트 코드가 자바스크립트 엔진에서 싱글 스레드 방식으로 동작하면 비동기로 동작이 불가능하다

 

동기 처리 방식

태스크를 하나씩 처리 -> 실행 순서 보장 / 1번 태스크 종료때까지 2번 태스크 블로킹

 

비동기 처리 방식

태스크 상태 상관없이 실행 -> 순서 보장 X

ex) setTimeout,setInterval,HTTP 요청, 이벤트 핸들러

 

이벤트 루프와 태스트 큐

자바스크립트는 싱글 스레드로 동작하지만, 브라우저의 동작을 보면 많은 태스크가 동시에 처리되는 것처럼 보인다

자바스크립트의 동시성을 지원해주는 것이 이벤트 루프

-이벤트 루프는 브라우저에 내장되어 있는 기능중 하나

 

출처 : https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf

 

*콜 스택 

- 실행 컨텍스트 스택이 바로 콜 스택 (함수를 호출하면 함수 실행 컨텍스트가 순차적으로 콜 스택에 푸시되어 순차적 실행)

 

*힙 

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

객체는 메모리 공간의 크기를 런타임에 동적 할당 ( 크기가 정해져 있지 않기 때문)해야 한다

그래서 힙은 구조화 X

 

728x90
반응형