Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

레커

[TIL] 2023_10_13_자바스크립트 싱글스레드/비동기/ 본문

개발/TIL

[TIL] 2023_10_13_자바스크립트 싱글스레드/비동기/

Prism Wrecker 2023. 10. 13. 20:34

프로세스?스레드?

프로세스(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