Closed ChoMk closed 4 years ago
객체는 처리의 추상화다. 스레드는 일정의 추상화다. - 제임스 O.코플리엔
- 여러 스레드를 동시에 돌리는 이유와 어려움
- 어려움에 대처해 깨끗한 코드를 작성하는 방법과, 동시성을 테스트하는 방법과 문제점.
java.util.concurrent
)synchronized
)메서드 사이에 존재하는 의존성을 조심하라
✔️ 문제를 노출하는 테스트 케이스 작성할 것 (설정과 부하를 바꿔가며..)
- "말이 안되는 실패는 잠정적인 스레드 문제로 취급하라"
- 시스템 실패를 '일회성'으로 치부하지 X
- "다중 스레드를 고려하지 않은 순차 코드부터 제대로 돌게 만들자"
- POJO에 넣는 코드는 많을 수록 더 좋다? (=> 멀티스레드에 영향을 받지않는 부분이 많을 수록 좋다?!)
- 스레드 환경 밖에서 코드를 올바로 돌릴 것. 동시에 디버깅 X
- "다중 스레드를 쓰는 코드 부분을 다양한 환경에 쉽게 끼워 넣을 수 있게 스레드 코드를 구현하라"
- 다양한 설정에서 실행할 목적으로 코드 구현
- "다중 스레드를 쓰는 코드 부분을 상황에 맞게 조율할 수 있게 작성하라"
- "프로세서 수보다 많은 스레드를 돌려보라"
- "다른 플랫폼에서 돌려보라"
- "코드에 보조 코드를 넣어 돌려라. 강제로 실패를 일으키게 해보라"
보조코드 추가하는 방법 2가지
wait()
, sleep()
, yield()
, priority()
등의 함수 추가jiggle()
기법을 통한 오류 찾기
이번 주 발표자
진도
발표자료