[ 4-1 : Thread&Concurrency ]
지금까지, 우리는 Single thread로 제어하는 프로세스를 생각해왔음.
실행흐름이 1개 뿐인 것(a single thread of control)
그러나, 하나의 process가 여러 threads를 가질 수도 있음. (a process is able to contain multiple threads of control)
[ Thread ] : Light weight process
a basic unit of CPU utilization.
Thread ID, Program Counter, Register Set, Stack 포함
전부 쓰레드별로 가짐.
i.e.) 멀티쓰레드를 갖는 프로세스
code, data, files를 프로세스 내에서 공유하고,
각자 PC, Stack, Register Set, ThreadID를 가짐.
[ Benefits ]
- Responsiveness
중요한 유저의 요청이 와도, 프로세스의 일부만 블락되고 계속 실행 가능.
- Resource Sharing
프로세스내의 리소스를 공유함
멀티프로세스는 IPC(shared-memory, message-passing 필요
- Economy
프로세스 생성보다 훨씬 저렴하다. (프로세스는 크기가 크므로)
Process의 Context switching은 PCB를 교체해야 하기 때문에, Thread의 Context switching이 오버헤드가 더 작음.
- Scalability
Multiprocessor Architecture에서 더 유리해짐.
부모 쓰레드의 대기 : join();
Thread의 요약 정리
프로세스내에서 Code, Data 영역을 공유한 상태에서 PC나 레지스터 정보를 따로 가지면서, 하나의 프로세스내에서 실행되는 Light Weight Process를 쓰레드라 한다.
[ Multithreading in a Multicore system
more efficient use of multiple cores for improved concurrency
코어가 증가하면서, 멀티쓰레드를 사용하면 쓰레드들이 각자의 코어를 점유해서 사용하면 concurrency가 더욱 향상됨.
Single Core : threads들이 시간에 따라 Interleave
→ Cocurrent
Multi Core : 몇몇 threads들은 Parallel하게 실행 가능. (위 그림에서, T1-T2, T3-T4)
→ Parallel
* 싱글코어에선 괜찮았으나, MultiCore로 오면서 위와 같이 Concurrency는 향상되었으나 문제점이 많이 생김.
[ Programming challenges for programmer in Multithread ]
- Identifying Task : Separate Tasks로 나뉠 수 있는 영역을 찾을 수 있어야 함.
- Balance : thread별로 동일한 양의 일감을 나눠줘야 함.
- Data Splitting : 각 코어에 data가 나뉘어져야 함.
- Data dependency : Merge Sort의 경우, 합치는 순서를 맞춰줘야 함.
- Debuging : Test, Debug의 어려움.
[ Types for Parallelism ]
- Data Parallelism : Data를 쪼갬.
- Task Parallelism : 공유 Data, Task를 쪼갬.
[ Amdahl's Law ]
코어는 많을수록 좋은가?
병렬처리 비율 : 0.25, 코어 수 : 2 → 1.6배 향상
병렬처리 비율 : 0.25, 코어 수 : 4 → 2.28배 향상
→ 코어가 N배 증가했다고 전체 성능이 N배 증가하진 않는다.
병렬처리 비율이 낮다면 코어를 아무리 늘려도 일정 수준까지만 효율이 향상됨.
그래서 비율을 늘려야하는데 현실적으로 쉽지가 않음.
[ 4-2 : Threads&Concurrency ]
Two types of threads
1) User Threads
Kernel의 지원없이 관리
2) Kernel Threads
OS에 의해 직접적으로 관리
[ 3 Relationships User <-> Kernel threads ]
1) Many-to-One Model
2) One-to-One Model
3) Many-to-Many Model
[ 4.17 exercise ]
(4 + 2)개
[ Impliciting threading ]
- Thread Pool
대기하는 thread를 미리 만들어 둠.
- Fork&join
explicit threading, 그러나 implicit의 좋은 candidate.
- OpenMP
컴파일러에게 지시
'컴퓨터공학 > Operating System' 카테고리의 다른 글
[8-2] Deadlocks - 2 (0) | 2024.11.14 |
---|---|
[8-1] Deadlocks - 1 (1) | 2024.11.14 |
[7] Classic Problems of Synchronization (0) | 2024.11.14 |
[5] CPU Scheduling (0) | 2024.11.07 |
[3] 프로세스 (0) | 2024.11.06 |