1장
스레드
- 프로세스에 할당된 자원 공유(메모리, 파일 핸들링)
- 스레드는 각각 프로그램 카운터, 스택, 지역변수를 갖음
- 한 프로그램 내 여러 스레드를 동시에 여러 개 CPU 할당 실행
안정성
- 잘못된 일은 일어나지 않음
활동성
- 원하는 일이 일어난다
성능
- 쓰레드가 많으면 컨텍스트 스위칭이 빈번
2장
쓰레드 세이프한 코드는 공유되고 변경할 수 있는 상태에 대한 접근 관리
- 상태 변수를 스레드간에 공유하지 않음
- 상태 변수를 변경할 수 없도록 만들기
- 상태 변수에 접근할 때는 동기화
객체지향
- 스레드 세이프한 클래스를 만들고 캡슐화, 불변 객체 활용
쓰레드 세이프
- 여러 쓰레드가 클래스에 접근해도 정확히 동작
정확성(correctness)
- 클래스의 명세에 부합
경쟁 조건
- 상대적 시점이나 JVM이 여러 스레드를 교차하는 상황에 따라 계산 정확성이 달라지면 나타남.
락
- 상태를 일관성 있게 유지하려면 변수들을 하나의 단일 연산으로 갱신
암묵적인락
- 자바에서는
synchronized
키워드 제공 - 자바에 내장된 락을 암묵적인락(intrinsic loc), 모니터락(monitor lock)이라고 함
- 자바에 내장된 락은 뮤택스로 동작
- 메서드, 서블릿에 지나친 범위로
synchronized
을 걸면 성능 이슈
재진입성
- 자신이 확보한 락을 다시 확보할 수 있음.
- 쓰레드 단위로 락을 얻음.
- 락 획득: 1, 락 해제: 0
성능
synchronized
은 필요한 블록 범위에 사용하기
자바에서 System Print Out을 로그로 남용하면 안되는 이유
- 내부에
synchronized
처리가 되어있다.
'읽은책' 카테고리의 다른 글
익스트림 프로그래밍 서문 (0) | 2023.10.01 |
---|---|
GraphQL과 타입스크립트로 개발하는 웹 서비스 (0) | 2023.09.30 |
데이터 중심의 애플리케이션 설계 (0) | 2023.09.24 |
육각형 개발자 (0) | 2023.09.24 |
패턴, Wiki 그리고 XP (0) | 2023.09.22 |