-
1) 쓰레드란?
- 프로그램 실행의 단위이며, 하나의 프로세스에는 N개의 쓰레드가 존재 할 수 있다.
- ID, Program Counter, Resiter Set, Stack 으로 이루어져있다
- 같은 프로세스 안에 있는 쓰레드는 서로 정보를 공유한다.
-장점 : 응답속도 및 확률 // 자원 공유 // 경제성[ overhead 발생률 적어짐] // 처리능력 [Scalability]
* User Thread vs Kernal Thread
1) 개발자에게 가시적이며, 커널에겐 알려지지 않음
=> 커널의 개입이 존재하지 않기 때문에, 커널 쓰레드보다 생성과 관리 빠르다.
2) 운영체제에 의해 관리되고, 서포트 받는다.
*Concurrency [병행] VS Parallelism [병렬]
1) one by one : Single thread
2) Multithread
병렬성의 종류
1 Data Parallelism
데이터의 부분을 여러 쓰레드에게 분배하는것을 목적으로한다.
ex ) 0~N 까지의 합을 구하는 경우 [ Dual Thread] / Thread 1 : 0 ~ N/2 -1 : Thread 2 : N / 2 ~ N -1
2 Task Parallelism
여러 작업을 분배함으로써 각자 고유의 일을 수행한다.
대표사진 삭제
예시 : 한글과 컴퓨터라는 하나의 프로세스는 그래픽을 보여주기 위한 쓰레드와 유저의 키보드에 반응하는 쓰레드와 같이 다양한 쓰레드로 구성이 되어있다 !
즉, 1개의 프로세스가 단일 쓰레드를 가진다는 것은 작업이 동시에 이루어질 수 없다는 의미를 가진다
2) 멀티쓰레딩 모델의 유형[ Multithreading Models : About relation betwwen user & kernal thread]
1) Many to One Model [ Users : Kernal ]
- 쓰레드를 관리하는 라이브러리는 유저 쓰레드에 있어 효율적이다.
- 하나의 쓰레드가 커널에 접근하면, 다른 모든 쓰레드는 접근이 불가하다 [ not parallel ]
사진 삭제
사진 설명을 입력하세요.
2) One to One Model
- 다른 쓰레드가 block 하더라도, 다른 쓰레드들을 수행한다.
- One to One 으로 구성을 하였기 때문에 병행[Parallel] 처리가 아닌 병렬처리[Concurrent]로 이루어진다.
- 하지만 커널과 유저 쓰레드의 개수를 매칭시키다보니 성능의 저하를 일으킬 수 있다.
사진 삭제
사진 설명을 입력하세요.
3) Many to Many
- 더 많은 수의 유저 쓰레드를 멀티플렉싱 함으로써, 유저 쓰레드와 같거나 적은 수의 커널 쓰레드를 유지 가능
- 이론적으로는 어떠한 단점을 가지지 않았지만 구조가 복잡하여, 실제로 구현하기 어렵다.
사진 삭제
사진 설명을 입력하세요.
=> 결과적으로 현재의 운영체제는 대부분 One to One Model을 선호한다.
3) Threading Issues
3-1) Signal Handling [ Signal : 프로세스에게 어떤 특정한 사건이 발생했음을 알리는 역할]
* Synchronous vs Asynchronous
1) 시그널을 발생시킨 작업을 수행하고있는 프로세스에게 알리는 것
2) " " 무관한 프로세스에게 알리는 것 -> ramdomly go to unblocked thread
3-2 Threading Pools
시작 전에 일정 수의 쓰레드를 만들어두고, 작업이 들어오게되면 풀 안에 있는 worker들이 수행한다.
장점 : 새로운 쓰레드를 만드는 것보다 구현 속도가 빠르다, 쓰레드 수를 통제 할 수 있다.
댓글