개념 이해에는 이 영상이 왔따다
다른 언어에서는 서순대로, 위에있는게 끝나야 아래있는게 시작됬는데, 이게 동기다.
서순때문에, 위에있는게 안 끝나면 아래있는 것은 무한정 기다려야 했었다. (= 위에꺼 때문에 쉬고있다는 점에서 블로킹이라 한다.)
아니 근데, 그런 방식이 싫었나보다. 위아래도 없이 서순을 파괴하고 실행하는 것이 비동기다.
그말은즉슨, 위에있는게 안 끝나도 딴거 같이 한다는 것이였다. (= 안 쉬고 딴일 계속한다는 점에서 논 블로킹이라 한다.)
JS = 싱글 쓰레드로 동작한다. (= Call Stack이 하나 = 모든 함수 실행을 하나의 쓰레드가 순회하며 실행된다.)
- 부드러운 멀티 쓰레드와 비교되는 싱글 쓰레드를 극복하기 위해 JS는 비동기를 쓴다.
앵간한 것은 -> JS 메인 쓰레드(동기처리)
시간비용 큰 것은 -> 다른 쓰레드(비동기 처리)
- Network IO(네트워크 요청) : Ajax 같은거
- File IO(파일시스템 작업) : 파일 읽고 쓰기 같은거
- 의도적 시간 지연사용 기능 : 알람, setTimeout() 같은거
- 사용자 입력, 이벤트 처리 같은거
- DB 조회 같은거
- 비동기 처리할 일을 API에 넘겨 실행한다.
- 별개의 멀티 쓰레드 영역
- 브라우저에선 Web API, NodeJS에선 Node API
- 처리가 끝났을 때, 그 뒤에 실행될 일이 있음 Event Queue에서 저장되서 대기한다.
- 메인 쓰레드가 일 없어지면 Event Loop가 Event Queue에 있는 일을 꺼내서 실행한다.