18장 동시성2 (429 ~ 436)
<aside>
💡 작업 처리량 높이기
</aside>
- URL 목록을 받아 네트워크에 연결한 다음 각 페이지를 읽어오는 코드
- URL Iterator를 받아 목록에 들어있는 페이지 내용을 제공하는 Iterator
- PageIterator 인스턴스는 여러 스레드가 공유한다. 코드에서 synchronized 블록이 아주 작다는 사실에 주목하자.
- 단일 스레드 : 13페이지 처리 시 19.5초
- 다중 스레드 : 13페이지 처리시 약 6초
데드락
<aside>
💡 데드락이 발생하는 4가지 조건
</aside>
- 상호 배제 : 여러 스레드가 한 자원을 공유하거나 그 자원은 동시에 사용하지 못 하고 개수가 제한적 (DB연결, 쓰기용 파일 열기 등)
- 잠금&대기 : 스레드가 자원을 점유하면 필요한 나머지 자원까지 모두 점유해 자원을 내놓지 않는다
- 선점 불가 : 한 스레드가 다른 스레드로부터 자원을 빼앗지 못한다
- 순환 대기 : 죽음의 포옹
<aside>
💡 데드락 발생시키지 않기
</aside>