레커
[TIL] 2023_10_13_자바스크립트 싱글스레드/비동기/ 본문
프로세스?스레드?
프로세스(process)
운영체제로부터 자원을 할당받은 작업의 단위
자신만의 데이터를 가지다
스레드(thread)
- 경량 프로세스 ( Ligth Weight Process)
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 동일한 데이터를 공유한다.
스레드를 사용하는 이유
Process Context Switching 보다 Thread Context Switching가
자원을 절약하고 오버헤드를 줄 일 수 있다. 등등... 이런 말들 어려워~~못 알아 듣겠다.
위에 내용들은 운영체제 입장에서 말을 하는 것 같다.
내가 자바스크립트로 하나의 어플리케이션을 만들다면(프르그램) 입장에서 스레드는 뭘까?
- 웹 브라우저에서 웹 페이지를 보면서 동시에 파일을 다운로드할 수 있다.
- 워드 프로세서에서 문서를 편집하면서 동시에 인쇄한다.
- 게임 프로그램에서는 응답성을 높이기 위하여 많은 스레드를 사용한다.
- GUI에서는 마우스와 키보드 입력을 다른 스레드를 생성하여 처리한다.
=> 하나의 프로세스에서 멀티작업을 하기 위해 스레드 사용하는 것 같다.
자바스크립트 싱글스레드?
자바스크립트는 싱글 쓰레드로 동작한다라고 배웠다. 근데 보면 비동기처리를 한다.
사실 한 번도 고민을 해본 적이 없다. 다른 곳에서 썼던 기억으로 그냥 썼다.... async await...
많이 찾다보니 '어쨌든 이벤트 루프는 무엇입니까? | Philip Roberts | JSConf EU' 시청하게 되었다.
프로그램이 동기적으로 작동한다면 앞에 처리가 끝날 때까지 뒤에 코드가 실행되지 않고 기다려야 한다.
자바 스크립트는 싱글 스레드라면 기달려야지..
V8 엔진이라고 하는 부분에는 Heap / Stack 만 있고 다른 이벤트/비동기 작업은 Web APIs 로 처리를 한다.
그리고 Web APIs 작업이 끝나는 것을 알려오면
Callback Queue로 넣는다.
강의에 나오는 사이트에서 런을 하고 클릭미를 미친듯이 눌러봤다.
보면서 갑자기 떠오른 생각이 있다. V8은 되게 단순하다. 내 스택에 있는 것만 처리하면 된다.
그리고 Callback Queue도 신경도 안쓰고 Callback Queue가 전달해 주면 움직인다.
그러면서 생각이 난 부분이 있다.
대학교 때 setTimeout() 이 통해 5초 뒤에 콘솔 찍기 이런걸 했다.
그 당시에는 임베디드나 이쪽에서는 ATmega 128 이런거 보면 타이머 포트가 따로 있다.
시간에 대하 오차가 신뢰할 수 있는 수준이였는데 javascript는 신뢰를 못 할 수도 있다라고 이야기 배웠던 것 같다.
지금 생각해보면 내가 미친듯이 클릭을 하면서 부하를 주게되면 setTimeout() 끝나도 저 멀리서 줄 서고 있을 수 있다.
그래서 정확하지 않을 수 있지 않을까? 라고 생각을 하고 있다.
개인적으로 갑자기 생각이 나서 적었습니다.
옛날에 윈도우 explore 사용할 때 내가 창을 3개 키면 작업관리자에 3개가 보였다.
지금 엣지를 켜보면 ?
난 탭 1개 열었는데 14개 돌아가는 것을 보면서 어떤 것 때문에 이런 현상이 일어날지 궁금했다.
개인적으로 상상을 하면 어떻게 페이지를 처리하면 될까?
내가 크롬이라고 하면 V8을 더 만들것 같다. 찍어낼 수 있지 않을까? 궁금하다.
이벤트처리하는 V8, IN/OUT 처리하는 V8 등 기능 별로 넣을 것 같다.
생각하다가 네이비즘을 들어갔다. 왠지 시간하면서 이벤트가 있지 않을까?
작업관리자의 변화를 좀 지켜봤다.
첫 번째 화면 탭만 있을 땐 14개
네이비즘 화면 들어가는 순간 23개로 올라 갔다.
조금 기다리니깐 20개로 줄었다.
나만의 소설을 써보자면 Web APIs가 외부 API라서 다른 서버의 작업을 기다릴 수 도 있지만 setTimeout() 또는 이벤트를 새로운 프로세스를 만들어 처리하고 끝나면 회수하는거 아닐까? 라는 소설입니다.
소설에대한 근거를 찾으려고 합니다.
다만, 더 알아보고 싶은데 뭐 시키는게 있네요?!...일단 눈앞에 있는걸 처리를 하고 더 찾아보고
다시 작성을 해보겠습니다.
이 부분은 제가 막 생각난 걸 적을 같네요^^
'개발 > TIL' 카테고리의 다른 글
CORS (0) | 2024.01.19 |
---|---|
Container (0) | 2024.01.17 |
NoSQL과 RDBMS의 특징과 차이점/Primary Key, Foreign Key (0) | 2024.01.16 |
[TIL] 2023_10_13_프로세스 (0) | 2023.10.16 |
[TIL] Nest.js 첫 경험.... (0) | 2023.10.12 |