Thread
- 쓰레드는 공유자원을 가지고 있고 각각의 자원도 가지고 있다.
- 공유자원은 code, data, files ex) 전역변수
- 각각의 pc값과 stack(지역변수)공간을 가지고 있다.
- 쓰레드가 뭐냐 => 프로세스 안에 있는 독립된 실행단위
main에서 4개의 쓰레드를 실행키면 총 흐름의 개수는 => 5개이다. main까지 포함해서
자바에서 Thread 만들기
Myth extends Thread{
run(){
blabla();
}
}
t1 = new Myth();
t1.start(); => 여기서 Myth의 run시작하고 쓰레드가 언제 끝나냐 run이 끝나면 끝난다.
t2 = new Myth();
t2.start();
t1.join(); 쓰레드가 끝날때까지 기다리겠다. (시스템 콜의 wait랑 똑같은 메소드)
t2.join();
Thread : LWP(Lightweight Process) - 경량 프로세스
- 자원을 조금 쓴다.
- 생성시간이 짧다
- communication이 쉽다 (한 프로세스의 전역변수는 여러 쓰레드에서 접근이 가능하다)
- IPC(Inter Process Communication)
4.4 Thread Libraries
- 쓰레드 라이브러리를 제공하는 두가지 방법
- 커널 지원 없이 user 모드에서 로컬 함수 호출
- 커널 수준의 라이브러리, 커널에 대한 시스템 호출
윈도우 : 자기꺼 쓰레드 라이브러리 쓴다.
자바 : 윈도우 API를 사용하여 자기껄 구현한다.
유닉스, 리눅스 맥os : Pthreads를 사용한다.
POSIX(Protable OS Interface for Unity)
4.4.1 Pthreads
- Pthreads
- Window도 third - party로 구현해서 pthread를 사용가능하다.
쓰레드를 사용자 수준과 커널 수준 중에서 뭐가 더 빠를까?
=> 사용자수준에 해도 커널로 접근해야되기 때문에 커널이 더 빠르다.
자바 쓰레드는 나중에~
4.5.1 Thread Pool
장점 3가지
- 고객 요청이 들어왔을 때 새로 만드는거 보다 미리 만들어 두고 배정하는게 더 빠르다.
- 스레드 풀은 특정 시점에 존재하는 스레드의 수를 제한한다.
ex) 만약 200개로 제한해놨는데 프로세스가 200개 이상이면 대기열이 걸린다.
- 수행할 작업을 생성하는 메커니즘에서 작업을 분리하면 작업을 실행하기 위한 다양한 전략을 사용할 수 있습니다. 작업을 일정 시간 지연 후에 실행하도록 예약하거나 주기적으로 실행하도록 할 수 있습니다.
쓰레드를 몇개 만드는게 최적이냐? heuristically(경험적으로) 기반을 둔 요소를 고려한다. 데이터에 의해 가변적으로 적용할 수도 있다.
4.5.3 p.183
openMP는 C,C++, FORTRAN 등에서 쓰레드를 최적화 해서 자동생성할 수 있게 도와준다.
#pragma omp parallel for => 병렬처리 해달라는 지시어(directive)
4.5.4
Grand Central Dispatch(GCD) 애플에서 개발한 병렬처리 라이브러리
4.7.2
리눅스에서 clone()이라는 시스템콜을 추가 했다.
기본적인 동작 원리는 같다.
1.fork() : 부모와 자식의 공유하는 부분이 없다.
2.clone() : 공유부분을 지정할 수 있다.
그러나, 리눅스는 process와 thread를 Task라는 이름으로 크게 차이두지는 않는다. => 독립된 실행단위라는 점에서 차이가 없다.
'[운영체제 정리]' 카테고리의 다른 글
Operating System Concepts 6장 Synchronization Tools (6) | 2024.12.17 |
---|---|
Operating System Concepts 5장 CPU Scheduling (3) | 2024.12.17 |
Operating System Concepts 3장 Processes (3) | 2024.12.17 |
Operating System Concepts 2장 Operating-System Structure (4) | 2024.12.17 |
Operating System Concepts 1장 Introduction (3) | 2024.12.17 |