스레드
한 프로세스에서 다양한 작업을 담당하는 최소 실행 단위
ex) 크롬 브라우저(프로세스)에서 블로그 작성하기(스레드) , 유튜브 보기(스레드2)
멀티스레드 프로그래밍
CPU는 한번에 하나의 명령만 실행할 수 있지만, 운영체제의 스케줄러가 매우 짧은 주기로 각기 다른 명령을 우선순위에 따라 실행시키면 동시에 여러 로직도 수행 가능하다.
Context Switching이 발생하면서 부분적으로 각각의 스레드 작업을 끝낸다.
대용량 처리에서 필수적
단점: 오류를 찾아내기 어렵고 고려사항이 많다.
Nodejs 싱글스레드 프로그래밍
- Nodejs는 하나의 메인스레드와 하나의 콜스택을 가지고 있다.
- 싱글스레드라고 모두 같은 스레드 위에서 동작하지 않는다.
- 단일 스레드이지만 백그라운드에서는 스레드 풀을 구성해 작업을 처리한다.
- 플랫폼(libuv)이 스레드 풀을 관리하기 때문에 개발자는 단일 스레드에서 동작하는 것 처럼 이해하기 쉬운 코드를 작성할 수 있다.
- 웹서버를 운용할 때는 CPU 코어를 분산해서 관리하므로 실제 작업은 여러개의 코어에서 별개로 처리된다.
- 입력은 하나의 스레드에서 받지만 순서대로 처리하지 않고 먼저 처리된 결과를 이벤트로 반환해주는 방식 (non-blocking)
1. 비동기 작업 코드가 호출 스택에 쌓인 후 실행될때, 해당 작업을 web API에 위임한다.
2. web API는 해당 작업을 수행하고 콜백 함수를 이벤트 루프를 통해 태스크 큐에 넘겨준다.
3. 이벤트루프는 콜스택에 쌓여있는 함수가 없을 경우 테스트 큐에서 대기중인 콜백함수를 콜스택으로 넘겨준다.
4. 콜스택에 쌓인 콜백함수가 실행되고, 콜스택에서는 제거된다.
728x90
반응형
'개발공부 > NodeJS' 카테고리의 다른 글
[공유/번역] Concise 간결한 Typescript Book (0) | 2023.08.05 |
---|---|
[공유] 이벤트 루프를 차단하지 않기 위한 실용적인 가이드 (0) | 2023.06.24 |
마이크로서비스와 Nodejs (0) | 2023.06.06 |
Nodejs 환경에서 Artillery로 부하테스트 하기 (0) | 2023.05.29 |
Express 웹서버 구축 - route, body-parser, compression, cookie-session, express-session, session-file-store, cors, morgan, multer, response-time, connect-timeout (0) | 2023.05.28 |
댓글