Os_multithread
Thread
- 독립적으로 스케줄링되는 단위
- 프로세스 = 하나 이상의 같은 메모리 공간을 공유하는 쓰레드들로 구성
-
장점
- 반응성: 프로세스가 block되어도 영향 없음
- 자원 공유: 프로세스에 비해 자원공유가 간단
- 경제성: context switching overhead가 프로세스에 비해 적다
- 확장성: 멀티프로세서 장점 활용 가능
- 예: 서버가 클라이언트에 요청을 받으면 새 프로세스를 생성하는 대신 worker thread를 생성하여 요청 처리
- 구성
- stack + register
- 같은 프로세스 내 쓰레드들끼리는 code, data, heap 공유
- 쓰레드 생성시 stack + register만 새로 생성됨
Parallelism과 Concurrency
Parallelism
- 동시에 2개 이상의 작업을 수행하는 시스템
- 멀티코어 구조에서만 가능
- Data Parallelism: 여러 프로세서에서 동일한 데이터로 동일한 작업 수행
- Task Parallelism: 여러 프로세서에서 서로 다른 쓰레드로 서로 다른 작업 수행
Concurrency
- 2개 이상의 작업이 동시에 진행될 수 있는 시스템
- 싱글코어 구조에서도 가능
차이
- Concurrency
- 서로 다른 작업들을 중첩시켜 진행하는 방식
- 여러 작업들이 있을때 한 작업이 끝나기 전 다른 작업 진행 가능
- Parallelism
- 서로 다른 작업들을 동시에 여러개 처리하는 방식
Multithreading
- User thread: user level thread library가 관리
- Kernel thread: kernel이 관리
-
종류
- Many to One
- 여러 user thread들이 하나의 kernel thread에 결합
- 하나의 thread가 block되면 다른 thread들도 block됨
- 하나의 kernel thread만이 처리 가능하므로 병렬 실행 불가
- One to One
- 하나의 user thread가 하나의 kernel thread에 결합
- user thread 생성시 연결할 kernel thread도 함께 생성
- 병렬 실행 가능
- 하나의 thread가 block되어도 다른 thread 실행 가능
- context switching overhead 발생 가능
- 생성 가능한 thread 수 제한
- Many to Many
- 여러 user thread가 여러 kernel thread에 결합
- kernel thread 생성 수 제한 없음
- Two level model
- Many to Many + One to One 형태
- 중요도가 높은 user thread는 One to One 형태로 처리하여 선점권을 부여할 수 있다.
- Many to One