7판
저자 : Silberschatz, Galvin, Gagne
저서 :
옮김 : 조유근, 고 건, 김영찬, 박민규
펴낸 곳: 홍릉과학출판사, WILEY
초판 :
쇄 :
Part 2. 프로세스 관리(Process Management)
Chapter 4. 쓰레드(Thread)
4.4 쓰레드와 관련된 문제들(Threading Issues)
4.4.3 신호처리(Signal Handling)
- 신호의 전달 형태
1) 신호는 특정 사건이 일어나야 생성된다.
2) 신호가 생성되면 프로세스에게 전달된다.
3) 신호가 전달되면 반드시 처리되어야 한다.
- 동기식 신호의 예 : 불법적인 메모리 접근, 0으로 나누기 등
- 동기식 신호는 신호를 발생시킨 연산을 수행한 동일한 프로세스에 전달된다.
- 신호가 실행 중인 프로세스 외부로부터 발생되면 그 프로세스는 신호를 비동기식으로 전달받는다.
ex) crtl+c, 타이머 만료
- 비동기식 신호는 통상 다른 프로세스에게 전달된다.
- 모든 신호는 둘 중 하나의 처리기에 의해 처리
1) 디폴트 신호 처리기
2) 사용자 정의 신호 처리기
- 모든 신호마다 커널에 의해 실행되는 디폴트 신호 처리기가 있다.
- 디폴트 신호 처리기는 사용자 정의 신호 처리기에 의해 대체될 수 있다.
- 신호는 다른 방식으로 처리될 수 있다.
- 단일 쓰레드 프로그램의 신호는 항상 프로세스에 전달된다.
- 다중 쓰레드 프로그램의 신호의 전달
1) 신호가 적용될 쓰레드에게 전달
2) 모든 쓰레드에게 전달
3) 몇몇 쓰레들에게만 선택적으로 전달
4) 특정 쓰레드가 모든 신호를 전달받도록 지정
- 신호를 전달하는 방법은 신호 유형에 따라 다르다.
1) 동기식 신호 : 신호를 야기한 쓰레드에게 전달
2) 비동기식 신호 : 명확하지 않다
ex) ctrl+c 는 모든 쓰레드에 전달해야 함
- 대부분의 다중 쓰레드 UNIX는 쓰레드가 신호를 전달받거나 봉쇄할 수 있는 선택권을 준다
- 경우에 따라 비동기식 신호를 받겠다고 지정한 쓰레드들에게만 신호를 전달한다.
- 신호는 오직 한 번만 처리되어야 함
- 신호를 받겠다고 선언한 쓰레드들 중 첫 번째 쓰레드에게만 신호가 전달
4.4.4 쓰레드 풀(Thread Pool)
- 다중 쓰레드 서버의 문제
1) 서비스할 때마다 쓰레드를 생성하는 데 소요되는 시간
2) 모든 요청마다 새 쓰레드를 만들어서 서비스해 준다면 시스템이 동시에 실행할 수 있는 최대 쓰레드 수가 몇 개까지 가능할 수 있는 것인지 한계를 정해야 한다.
: CPU 시간, 메모리 공간 같은 시스템 자원 고갈
- 해결 방법 중 쓰레드 풀이 있다.
1) 프로세스를 시작할 때 아예 일정한 수의 쓰레드들을 미리 풀로 만들어둔다
2) 평소에는 일감 대기
3) 한 개의 요청 -> 풀에서 한 개의 쓰레드 할당 -> 요청완료 -> 쓰레드 풀로 복귀
4) 요청 시 풀의 쓰레드 모두 소진일 경우 생길 때 까지 대기
- 장점
1) 속도
2) 많은 수의 쓰레드를 병렬 처리할 수 없는 시스템에 도움
'책을 읽.쓰.' 카테고리의 다른 글
<리눅스 프로그래밍 : 원리와 실제> (0) | 2020.02.18 |
---|---|
<재무제표 모르면 주식투자 절대로 하지마라> (8) | 2020.02.11 |
<컴퓨터 시스템> UPDATE.20200225 (0) | 2020.02.07 |
<아는 만큼 보이는 데이터베이스 설계와 구축>, UPDATE.20200210 (0) | 2020.02.06 |
<부자들의 생각법> (6) | 2020.01.20 |