Thread 의 타입
- user thread
- 커널 서포트 없이 유저 모드에서 관리됨
- 유저 스페이스
- kernel thread
- OS가 CPU core 를 직접 설정해서 사용
- 커널 스페이스
유저 스레드와 커널 스레드의 관계
커널모드 위에서 유저모드가 돌아감
- Many-to-One Model
- One-to-One Model
- Many-to-Many Model
요즘 자주 사용되는 스레드 라이브러리
- POSIX Pthreads
- Windows thread
- Java thread(유닉스라면 pthrad, 윈도우면 윈도우꺼 사용)
Pthreads
- POSIX 기본 규격 (IEEE 1003,1c)
Implicit Threading 방법
- 동시, 병렬적인 앱을 디자인하는 것은 멀티코어, 멀티스레딩을 디자인하는것과 같다 ⇒ 어렵다
- 그래서 컴파일러, 라이브러리가 알아서 해주는 것
- Thread pools (스레드 풀링)⇒ 너무 많은 스레드를 유저가 만들게 하지 않도록 미리 몇개를 만들어놔서 쓰는게 효과적
- ⇒ 여러 개의 스레드를 풀에 넣어놓고 필요할때 쓰는 것
- create & joinexplicit → 사용자가 스레드에 직접 관여하는 것
- implicit → 운영체제가 관리하는 것
- ⇒ explicit(명시적) 스레딩이 있고 implicit(암시적) 하게 스레딩하는 방법도 있다(?)
- OpenMP
- ⇒ 컴파일러 지시어(compiler directive)를 이용하여 C 나 C++ 에서아주쉽게 병렬처리 할 수 있도록 지원
- Grand Central Dispatch (GCD)
- ⇒ Apple 이나 iOS 에서 사용됨
OpenMP
- parallel region 만 지정해주면 알아서 병렬적으로 실행되는 것#include <stdio.h> #include <omp.h> int main(void) { #pragma omp parallel { printf("parallel region\\n"); } // 병렬 처리 되는 영역 }
- 컴파일시 -fopenmp 플래그 추가해야함
- 반복문같은 경우 그냥 실행하는것 보다 시간이 단축됨
'운영체제' 카테고리의 다른 글
10. 스케줄링 알고리즘 (0) | 2021.09.10 |
---|---|
09. CPU 스케줄링 (0) | 2021.09.09 |
07. 스레드의 이해 (0) | 2021.09.07 |
06. 프로세스간 통신의 실제 (0) | 2021.09.06 |
05. 프로세스간 통신 (0) | 2021.09.05 |