연습장

비동기 처리 본문

기타

비동기 처리

js0616 2024. 7. 27. 19:10

https://www.youtube.com/watch?v=rZrbQv1bMaI

 

 

1. 비동기 처리는 왜 필요한가?

Javascript는 싱글 스레드 언어 == 두 개 이상의 연산이나 함수를 동시에 실행할 수 없다는 뜻

하나의 연산이 실행 중이면, 쓰레드가 block되는 것입니다.

시간이 오래 걸리는 작업이 메인 쓰레드를 block하고 있으면, 심각한 자원 낭비와 사용성 저하로 이어진다.

따라서, 메인 쓰레드를 block하지 않고 이런 작업들을 수행할 수 있는 방안이 필요합니다.

 

 

2. 비동기 작업이란 무엇인가?  
자바스크립트 엔진은, 긴 시간이 소요되는 작업들을 메인 쓰레드에서 처리하지 않고,

백그라운드에서 처리하며 이러한 작업을 "비동기 작업"이라고 부르는 것입니다.
    


3. 왜 C++ 라이브러리를 사용하는가?

single thread blocking 이슈를 비롯하여, 파일 시스템 접근과 OS 수준의 작업이 자바스크립트만으로는 불가능하며,

이 한계를 보완하기 위하여 자바스크립트 실행 환경 내에 자바스크립트로 접근 가능한 여러 기능들을 구현해 놓은 것

    


4. Callback 함수란 무엇인가?     
백그라운드에서 작업이 완료되면, 실패가 됐든, 성공이 됐든 메인 쓰레드가 결과를 알 수 있어야합니다.

동시에, 메인 쓰레드 입장에서 비동기 작업이 성공했을 때는 이런 처리를, 실패했을 때는 저런 처리를 하고 싶다는 요구가 있을 수 있습니다. 그래서 우리는 비동기 함수를 호출할 때, 처리 완료 시 메인 쓰레드에서 실행할 함수를 함께 전달하는데, 이를 callback함수라고 합니다.

 

"비동기 작업이 완료되었을 때 메인 쓰레드에서 실행할 함수"를 callback 함수라고 부른다.
    


5. 이벤트 루프의 필요성

메인 쓰레드와 백그라운드는 별도의 프로세스이기 때문에, callback함수가 들어와야 하는 시점이 애매해질 수 있습니다

callback함수가 들어올 시점을 정해주는 체계가 필요하며, 이 역할을 담당하는 것이 바로 Event loop입니다. 

    
6. Event loop의 동작 원리
모든 함수 호출들은 call stack에 LIFO구조로 쌓이고, 비동기 함수는 Call stack에 들어오는 즉시 백그라운드로 보내진다. 백그라운드에서 처리가 완료되면 callback 함수들은 event queue에 FIFO구조로 쌓이며, Event loop가 신호를 줄 때까지 기다린다. Event loop는 call stack이 비어있는지 수시로 확인하며, 비어있을 경우, Event queue에 쌓인 callback 함수를 shift하여 call stack에 push한다.

 

 

 

정리

 

비동기 작업이란?

자바스크립트는 싱글스레드로 한번에 2가지 이상의 연산이 불가능하며,
시간이 긴 작업을 만나게 되면 스레드가 블락이 되게 되므로 
이를 방지하기 위해 오래걸리는 작업을 백그라운드에서 진행하도록 비동기 작업을 사용한다.

 

콜백함수란?
비동기 작업이 완료되었을때, 추가적인 처리를 하기 위해 사용하는 함수를 콜백 함수라 한다.

 

함수 호출 과정
모든 함수 호출들은 call stack에 LIFO구조로 쌓이고, 비동기 함수는 Call stack에 들어오는 즉시 백그라운드로 보내진다. 
백그라운드에서 처리가 완료되면 callback 함수들은 event queue에 FIFO구조로 쌓이며, Event loop가 신호를 줄 때까지 기다린다. 
Event loop는 call stack이 비어있는지 수시로 확인하며, 비어있을 경우, Event queue에 쌓인 callback 함수를 shift하여 call stack에 push한다.

 

'기타' 카테고리의 다른 글

Promise  (0) 2024.07.28
02. 면접 대비 js  (0) 2024.07.27
콜백함수  (0) 2024.07.27
URI URL URN  (0) 2024.07.27
메모리 구조  (0) 2024.07.27