[CS] 멀티 스레드

이준기·2022년 8월 11일
0

스레드 (thread)


어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.

스레드는 CPU 활용의 기본 단위로, 프로그램 카운터, 스택, 레지스터들, 그리고 스레드 ID로 구성되어있음

  • 프로그램 카운터 - 다음에 실행될 명령어의 주소 (register 안에 있음!)
  • 스택 - 변수나 주소를 저장하는 공간
  • 레지스터

싱글 스레드 프로세스는 한 개의 레지스터와 스택을 가진다.

하지만, 멀티 스레드 프로세스에서는 code, data, file은 공유하지만 각 스레드가 레지스터와 스택은 따로 사용한다고 한다.

→ 각 스레드가 독립적인 프로그램 카운터(레지스터)와 스택을 가지면서 자신만의 실행 흐름을 가질 수 있게 되고, 동시에 한 프로세스에서 여러 작업을 처리할 수 있게 된다.

장점

  • Concurrency를 얻을 수 있다.
  • 스레드 몇개가 죽어도 정상작동한다.
  • 같은 메모리를 공유하므로, 자원 분배가 효과적이다.

단점

  • 동기화로 스레드간 자원 접근이나 처리 순서를 제어할 수 있는데, 잘못 lock을 걸었다간 오히려 성능이 안좋아질 수 있다. -> 프로세스 동기화 참고
  • 스레드를 생성하는 시간이 오버헤드가 될 수 있다.

스레드 풀

단점에 있던 스레드 생성 시간 문제를 해결하기 위해서 미리 스레드를 만들어두는 방법

Node.js는 싱글 스레드

node는 싱글 스레드로 동작한다고 알려져 있습니다. (싱글스레드 논블로킹)

우리가 앞서 본 바에 따르면 싱글 스레드 프로세스에서는 한 번에 한개의 작업만 수행할 수 있는것으로 보이는데, nodejs는 어떻게 싱글 스레드 프로세스에서 여러 작업을 동시에 수행 할 수 있었을까요?!

그 이유는 노드가 논블로킹 IO를 지원하기 때문인데요!

노드에서는 Libuv를 사용해 IO를 백그라운드에서 처리하고 그 결과를 받아 처리합니다. → libuv는 멀티스레드로 작동한다고 한다.

동기/비동기, block / non-block 참고!

Reference

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C

https://velog.io/@daeseongkim/Node.js-Node.js%EB%8A%94-%EC%8B%B1%EA%B8%80-%EC%8A%A4%EB%A0%88%EB%93%9C

profile
Hongik CE

0개의 댓글