Keep going
스레드 라이브러리 본문
스레드 라이브러리 구현 두 가지 방법
- user mode에서 스레드 라이브러리 구현하는 방법
- 운영체제 내부에서 구현하는 방법 (kernel 모드에서 돌아감)
스레드 라이브러리 종류
- POSIX
- windows
- java
- Implicit
pthreads
- 유저 레벨, 커널 레벨 둘다 제공
- a posix api - 스레드 지원하려면 다음과 같음 메서드들 제공해야 한다고 명시, 어떻게 구현할 건지 지정하는 것은 아님
- unix systems에서 사용
java
- JVM이 OS가 제공하는 스레드 기능 구현
- Runnable 인터페이스 내부에 run 메서드 → 스레드 생성
Implicit Threading
- 직접 만드는 것이 아니라 Runtime, Compiler가 만들어주고 암묵적으로 스레드 만들어서 실행하라고 명시하는 것
- 스레드가 숫자가 증가됨에 따라서 스레드를 많이 사용한다. (정확히 짜는 것 어렵다.)
- 스레드 만들고 관리하는것 compiler나 실행시스템이 하고 사용자는 하지 않는다.
- 병렬 실행 부분 지정해주고 컴파일러와 실행시스템이 알아서 만들어서 병렬적으로 실행한다.
- 스레드 세가지 방법
- Thread pools
- OpenMP
- Grand Central Dispatch
Thread Pools
- Thread pool이 없을 경우 : 서버에 요청이 들어오면 요청 처리하는 스레드 하나 만들어서 요청을 처리해주고 다른 요청이 들어오면 또 다른 스레드 만들어서 요청하는 방식
- 단점
- 요청이 들어올 때마다 스레드를 만들어야 한다. (스레드를 만드는 시간이 든다.)
- 요청이 많이 들어오면 스레드 수 많아져서 시스템이 감당할 수 없으면 시스템 속도 느려진다.
- 해결 법 → 서버 시작할 때 스레드 여러 개 만들어 놓는다.
- Thread pool 이용하는 경우
- 장점
- 스레드를 새로 만드는 것보다 이미 생성해서 요청을 처리를 하면 속도가 좀 더 빨라진다.
- 시스템이 얼마나 부하를 견딜 수 있는지 알기 때문에 스레드 개수 정해지면 정한 개수 이상 스레드는 만들어지지 않으므로 스레드 개수 조정할 수 있다.
- 간접적 장점 : 스레드 만드는 작업, 스레드 실행 시키는 작업 분리 → ex) 정기적으로 실행 되도록 스레드 만들 수 있다.
Grand Central Dispatch
- 작업은 task로 구성하고 task를 serial queue나 병렬 큐에 집어 넣어서 실행기가 serial queue는 순차적으로 parallel은 병렬적으로 실행되도록 만든다.
- 명시 block은 dispatch queue에 집어 넣으면 queue 종류에 따라서 알아서 실행 된다.
Comments