느린 IO디바이스 접근하기
사람들과 상호작용
작업 지연시켜서 시간지연을 줄이기(coalscing같은거 나중에 백에서 하기)
다수의 네트워크 클라이언트 처리
멀티코어 머신에서 병렬로 계산하기
프로세스
I/O다중화
쓰레드(12장 뒷부분, 쓰레드를 병렬로 처리하는 법)
12.1 프로세스를 사용한 concurrent programing
(1단계)
(2, 3단계)
(4단계)
서버들은 대개 장시간 돌아가니까 SIGCHILD 핸들러로 따로 관리를해야함
12.1.2 프로세스의 장단점
12.2 I/O다중화를 이용한 동시성 프로그래밍
여러 I/O디바이스가 있으면 동시에 들어온 신호들을 한번에 처리해줄 수 없음
프로세스는 여러개 프로세스를 쭉 만듬, 하지만 이거는 하나의 프로세스에서 처리해줌
프로세스 안에, 각자 I/O디바이스에 대한 상태머신이 있음
어려움… (성훈형: 나중에 좀더… 보자…)
12.2.2 I/O다중화의 장단점
12.3 쓰레드를 이용한 동시성 프로그래밍
메인쓰레드 하나 만들고, 개가 동료 쓰레드를 만듬
아까는 부모자식 관계였지만, 여기서는 동료(peer) 쓰레드를 만듬
자신의 피어를 모두 죽이거나, 자신의 피어들이 종료하는것을 기다릴 수 있음
피어는 동일한 고유데이터(위에서 말했던, 힙, 라이브러리 등)를 읽고 쓸 수 있다
피어에서도 메인 종료 가능, 메인에서도 피어 종료 가능
12.4 쓰레드 프로그램에서 공유 변수
12.4.3 공유 변수
12.5 세마 포어로 쓰레드 동기화하기
H,L,U,S 순서대로 움직여야함, 하지만 (b)에서는 HLUH 로, H가 침범해버림…ㄷ
그래서!! 세마포어!!
그래프에서 HLU하다가 갑자기 Unsafe region에 들어가버림
critical region(=unsafe region)
12.5.2 세마포어의 핵심
P, V(중요중요중요중요함)
P(s)
V(s)
화장실칸 비어있으면 1, 아니면 0, 그리고 새로운 P가 왔는데 자리가 없으면 기다림(자고있음)…. 화장실 한칸 다쓰고 나옴(화장실 쓰고 나오는게 V임)
그래서 화장실(s)는 0,1,0,1,0,1만 반복됨. 모든 화장실(s)가 꽉차있으면 새로운 프로세스는 잠자는거임(기다림), 똥 다싸면 깨워줌
세마포어 불변성:
세마포어의 기본 모양
12.5.4 세마포어를 이용한 공유자원 스케줄링
비디오 인코딩 디코딩
비디오를 인코딩해서 버퍼에 냅두면, 소비자가 그 인코딩된거를 들고 나갈 수 있음
이것도 세마포어로 풀 수 있음(세마포 3개)
붕어빵 비유
붕어빵 틀이 필요
공유자원(팥 밀가루 물 쓸거야)
팥 밀가루 쓰는거
붕어빵 다 만들고나면, 버퍼에 붕어빵 쌓아둠, 그럼 소비자가 또 가져감
12.6 병렬성을 위해서 쓰레드 이용하기(Using Threads for Parallelism)
12.7 다른 동시성 이슈(Other Concurrency Issues)
12.8 요약
추가내용