728x90
결론 부터 말하면, 단순하게 Javascript만으로 비동기함수를 처리할 수 없다.
런타임환경(Web APIs)에 비동기 작업을 위임하여 대신 처리할 동안 다른 코드를 처리한다. 따라서 동시성을 갖는다.
대신 처리해 준 것을 그 외의 자바스크립트 코드를 해석, 실행하는 Javascript 엔진의 작업이 끝난 후에 실행을 시켜준다.
Javascript는 하나의 메인스레드와 하나의 콜스택을 갖는다.
그렇기에 Javascript만으로 비동기 작업을 처리 할 수 없다.
Javascript가 싱글스레드라는 예)
- alert를 발생 시키면, 그창의 확인을 누르기전까지 UI조작이 불가능하다.
- Javascript가 Rendering Engine인 런타임환경(Web APIs, Node.js)에 비동기 작업을 위임하여 그들이 대신 처리 ->
- 이벤트 루프가 Web APIs가 작업해둔 비동기 작업을 임시 대기하는 태스크 큐(콜백 큐)에 옮긴다 ->
- Javascript의 콜스택이 동기 작업을 하는 동안 이벤트 루프가 확인 후 동기 작업 진행중인거나 콜스택에 쌓인 작업이 없는 것 확인 ->
- Web APIs가 작업해둔 비동기 작업(콜백 함수)을 콜스택에 옮겨 Javascript가 작업이 된 비동기작업을 뿌려준 후 완료
- 엔진의 종류
- 자바스크립트 엔진 (Javascript Engine) : Google V8(c++로 작성된 언어) : 동기 작업 실행.
- 힙(Heap) : 동적 생성된 객체 처리
- 콜스택(Call Stack) : 동기 작업 실행
- 렌더링 엔진 (Rendering Engine) : 런타임환경(브라우저, Node.js) : 비동기 작업 실행.
- 자바스크립트 엔진 (Javascript Engine) : Google V8(c++로 작성된 언어) : 동기 작업 실행.
- 작업의 종류
- 비동기 작업 : 작업이 실행되고 그 작업을 마치지 않아도 다른 작업 동시에 실행 가능. 언블로킹(제어권을 자신을 호출한 쪽에 넘기고 그 쪽에서 다른일을 실행할 수 있도록 하는 것).
- 동기 작업 : 작업이 실행되고 완료 될때까지 다른 작업 동시에 실행 불가능. 블로킹(자신의 수행결과 끝날때까지 제어권을 갖음) 특징을 갖는다.
싱글스레드 <-> 멀티스레드로, 멀티스레드의 언어 중 C언어가 있다.
'DEVELOP' 카테고리의 다른 글
[React.js] state와 클래스형 컴포넌트의 관계 (0) | 2022.02.25 |
---|---|
[React.js] 클래스형 컴포넌트 생명주기 (0) | 2022.02.25 |
[Linux] 리눅스 명령어 살펴보기(폴더 및 파일 관련) (0) | 2022.02.24 |
[Github] GitHub Pages 서비스 이용하기 (0) | 2022.02.24 |
[publishing] viewport 반응형 설정 (0) | 2022.02.22 |