Thread
Thread에 대해 학습한 내용입니다.
Thread란?
- 프로세스의 실행 단위 → 프로세스를 더 잘게 쪼개는 것이라고 생각하시면 편합니다.
- 각 Thread마다 Program Counter (PC), register set, stack을 가집니다.
- code, data, opened file는 thread간 공유되어집니다. ( 단, 같은 process에 속해 있어야 합니다.)
Thread 종류
- Single Thread → process 당 thread 1개
- Multi Thread → 대부분 이 구조를 사용합니다. 하지만, core가 한 개 뿐이라면, thread가 여러개라 하더라도 한 번에 하나의 thread 밖에 처리하지 못해서 병렬적이라고 할 순 없습니다. (Parallelism → x , Concurrency → o)
- User Thread → user level에서 제공되는 thread
- Kernel Thread → kernel-level에서 제공되는 thread
Multi-threading Models
-
Many-to-One : Many User threads, only one Kerenl thread
⇒ 하나의 thread만 한 번에 kernel 접근 가능, 실질적인 병렬처리가 불가능
-
One-to-One : Each user thread and kernel thread are mapped
⇒ Many to One model 보다 더 높은 동시성을 제공하며 multi-processor에서 병렬처리가 가능해집니다. 단, 너무 많은 kernel thread가 생성되면 잦은 context switching으로 인해 overhead가 커지며 성능이 저하될 수 있습니다.
-
Many-to-Many : m개의 user threads 와 n개의 kernel threads 로 구성(단, m≥n)
⇒ Many-to-One model과 One-to-one model의 장점을 챙기고 단점을 보완한 model입니다. 하지만, 그만큼 구현이 어렵기 때문에 대부분 One-to-One model을 채택하여 사용합니다.