[F-Lab 모각코 챌린지 - 11일차] - 이벤트루프

Big One·2023년 5월 21일
0

F-Lab

목록 보기
52/69

이벤트 루프란?

태스크 큐와 콜 스택을 감시하고 콜 스택이 비어있고 태스크 큐에 처리할 콜백 함수가 있으면 콜 스택에 올려주는 역할을 한다.

이벤트 루프가 왜 필요한가?

자바스크립트는 싱글스레드 기반 언어지만, 자바스크립트가 구동되는 환경은 여러 스레드를 사용한다.

여러 스레드가 구동되는 환경이 자바스크립트 엔진과 연동하기 위해 사용되는 장치가 이벤트 루프이다.

웹브라우저 동작 방식

파일을 실행하면 콜스택에 실행 컨텍스트가 쌓인다. 실행 컨텍스트 중 비동기 함수, setInterval 등은 자바스크립엔진이 아닌 웹 브라우저에서 Web API에서 처리하게 된다. Wep API에서 조건에 따라 수행하고 콜백 함수는 태스크큐(콜백 큐)에 담기게 된다.

콜스택에 쌓여있는 모든 실행 컨텍스트들이 실행 되고 비워지게되면 이벤트 루프는 이를 감지하고 태스크 큐(콜백 큐)에 있는 콜백 함수를 콜 스택에 올려주고 콜백 함수를 실행하게된다.

0의 지연 시간

지연 시간을 0으로 지정한다해서 0ms 후에 콜백 함수를 호출한다는 것이 아니다. 많은 예로 setTimeout(callback, 0)을 사용하는데 0초 후에 콜백함수가 즉시 실행되지 않는다. 실제 실행 시점은 큐에서 대기중인 작업의 수에 따라 다르다. 지연시간은 요청을 처리하기전 최소 대기 시간이다. 보장시간이 아니다!!

태스크 큐

마이크로와 매크로 태스크큐로 나뉜다. 웹 API에 따라 마이크로 태스크 큐를 사용하거나, 매크로 태스크 큐를 사용한다.

마이크로 태스크 큐

process.nextTick, Promises, queueMicrotask(f), MutationObserver

매크로 태스크 큐

equestAnimationFrame, I/O, UI rendering, setTimeout, setInterval, setImmediate

논 블로킹

자바스크립트는 절대 블로킹 연산을 하지 않는다. 대부분의 입출력 처리가 이벤트와 콜백을 통해 수행되므로 애플리케이션의 요청, 반환이 대기중이라도 사용자의 입력, 다른 것들을 처리할 수 있다.

프로세스와 스레드

프로세스란?

실행 프로그램 단위이다.

스레드란?

프로세스 내부에서 실행되는 작업의 단위이다.

멀티 스레드란?

하나의 프로세스에서 2개 이상의 스레드를 가지는 것이다.

단점: 스레드들이 한 프로세스를 공유? 하기에 동시에 공유되는 것을 여러 스레드들이 동시에 사용하게 되면 문제가 발생한다.

예) clickCount 변수 공유, 20 번 클릭 명령, 동시에 2번을 누르게되면 카운트가 1번 늘어난다 .. → 클로저, 함수형 프로그래밍 등으로 이런 문제점을 사전에 방지하기 쉬워진다?

동시성

CPU가 프로세스를 실행하기 위해 매우 짧은 시간내에 번갈아가면서 (Context Switching) 하면서 작업을 수행하는데 이 과정이 매우 짧아서 동시에 하는 것 처럼 보이는 것이다.

병렬성

CPU 발열이나 발전과정 문제가 있고 이를 위해 코어라는 것이 나왔다. CPU 12 코어 이런걸 말함

코어들로 여러 프로세스를 동시에 수행할 수 있게 되었다.

자바스크립트는 ‘병렬 처리한다.’ 는 말은 틀린 말이다!

에프랩에 나와있는 블로킹과 논 블로킹을 언급하면서 자바스크립트는 느리지 않다. 라고 설명한게 이거랑 관련이 있는건가

profile
이번생은 개발자

0개의 댓글