오래 못 할 짓 하지 않기
[ 운영체제 ] 8. Thread 본문
먼저 알아야 하는 내용:
● pthread_create(): 새로 Thread를 만든다.
( Process에서는 Fork )
● pthread_join() : 현재 있는 Thread를 다른 Thread가 return될 때까지 멈춘다.
( Process에서는 wait )
예제 1)
● 배열 값이 1,5인 range1 을 parameter로 받는 thread 하나 생성
> thread_summation 에서 계산,
> start = 1 , end 5
> 전역변수 sum에 1~5의 값을 더함
※ Thread는 하나의 Process의 자원을 공유하기 때문에 다른 Thread에서도 이 값을 사용가능하다.
> pthread_join를 해서, id_t1가 끝날 때까지 기다린다.
● 배열 값이 6,10 인 range2 을 parameter로 받는 또 다른 thread 하나 생성
> thread_summation 에서 계산,
> start = 6 , end 10
> 전역변수 sum에 6~10의 값을 더함
> pthread_join을 하고, id_t2가 끝날 때까지 기다린다.
출력 : result : 55
예제 2)
(오른쪽이 메인임)
● thread_one이라는 이름의 thread 하나 생성 ▶ func1 실행
● thread_two이라는 이름의 thread 하나 생성 ▶ func2 실행
thread_one → Thread #1 counter 0 출력 ▶ 조건문에 안 맞으니 sleep
thread_two → Thread #2 counter 0 출력 ▶ counter 1 증가 후 sleep
▶ couter = 1
thread_one → Thread #1 counter 1 출력 ▶ 조건문에 안 맞으니 sleep
thread_two → Thread #2 counter 1 출력 ▶ counter 1 증가 후 sleep
▶ couter = 2
...
▶ couter = 5
thread_one → Thread #1 counter 5 출력 ▶ 조건문에 들어가서 thread2를 cancel 시키고, Exit후 잠
▶ main 으로 넘어가서 join,
▶ Thread_two Join하는 걸 기다림
thread_two → Thread #2 counter 5 출력 ▶ 출력하고 cancel됨.
Implicit Threading
암묵적 스레딩
: Thread의 생성과 관리를 개발자가 하는 것이 아니라
관련 라이브러리 / 컴파일러가 알아서 처리해준다
● Thread pools
: Thread를 모아두는 박스라고 생각하면 된다.
ex) While(1)에 Thread 생성하는 명령어를 만들어두면, 셀 수 없이 많이 생길거고
감당이 안 될거다.
장점
1) 서비스 요청 측면에서 조금 더 빠르다.
( 새로운 Thread 만드는 것 < 원래 있는 Thrad 사용하는 게 더 빠름 )
2) Thread의 개수를 지정할 수 있다.
3) 해야하는 Taks들을 분리해서, 각 Thread에게 여러 일을 분담시킬 수 있다.
예제1)
(메인은 왼쪽 밑에 )
● ForkJoinPool 클래스를 써서 기능을 Threadpool 기능을 사용한다. → Instance = pool
- array에 난수를 10개 넣는다.
● 왼쪽에 있는 SumTask 클래스에 [ 시작 / 끝 / 들어갈 값 ] 을 넣어서 Instance를 하나 만든다..
- pool 인스턴스를 사용해서 task를 넣어주고 Thread로 실행한다.
→ pthread_create , pthread_join 이런 거 없이 작업 가능. 우리가 따로 만들거나 할 필요가 없다.
Thread 관련 자바 기능들 알아두기
Start = Thread creation임.
(출처)
한동대학교 고윤민교수님 - 운영체제
'3학년 1학기 > 운영체제 (OS)' 카테고리의 다른 글
[ 운영체제 ] 10. CPU Scheduling (0) | 2024.04.09 |
---|---|
[ 운영체제 ] 9. Thread(2) (0) | 2024.04.08 |
[ 운영체제 ] 7. Thread (0) | 2024.04.02 |
[ 운영체제 ] 6. Inter Process Communication / PIPE (0) | 2024.04.01 |
[ 운영체제 ] 5. 프로세스 - Parent,child (0) | 2024.03.25 |