티스토리 뷰
스레드 스케줄러
- 여러 스레드가 실행중이면 운영체제의 스레드 스케줄러가 어떤 스레드를 얼마나 오래 실행할지 정한다.
- 스레드 스케줄링 정책은 OS다를 수 있기 때문에, 프로그램은 이 정책에 좌지우지 되어서는 안된다.
특징
이식성 좋은 프로그램은 실행 가능한 스레드의 평균적인 수를 프로세서 수보다 지나치게 많아지지 않도록 하는 것이다.
- 스레드 스케줄러가 고민할 거리가 줄어든다.
- 실행 가능한 스레드의 수는 전체 스레드 수와 다르다.
실행 준비가 된 스레드들은 맡은 작업을 완료할 때까지 계속 실행되도록 만든다.
실행 가능한 스레드 수를 적게 유지하는 방법은 각 스레드가 작업을 완료한 후 다음 일거리가 생길 때까지 대기하도록 하는 것이다.
당장 처리해야 할 작업이 없다면 실행돼서는 안 된다.
스레드 풀을 적절히 설정해야 한다.
public class SlowCountDownLatch { private int count; public SlowCountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException(count + " < 0"); this.count = count; } public void await() { while (true) { synchronized(this) { if (count == 0) return; } } } public synchronized void countDown() { if (count != 0) count--; } }
스레드는 공유 객체의 상태가 바뀔 때까지 쉬지 않고 검사하는 바쁜 대기 상태가 되면 안 된다.
스케줄러의 변덕에 취약하며 프로세서에 부담을 주어 다른 작업이 실행될 기회를 박탈한다.
yield
- yield 스레드 실행 양보
- yield 지양해야하고 테스트 할 수단이 없고 jvm이나 os마다 결과가 천차만별일 수 있다
핵심 정리
프로그램의 동작을 스레드 스케줄러에 기대지 말자.견고성과 이식성을 모두 해치는 행위다.
같은 이유로,Thread.yield와 스레드 우선순위에 의존해서도 안 된다.이 기능들 은 스레드 스케줄러에 제공하는 힌트일 뿐이다.스레드 우선순위는 이미 잘 동작하는 프 로그램의 서비스 품질을 높이기 위해 드물게 쓰일 수는 있지만,간신히 동작하는 프로그램을 ‘고치는 용도’로 사용해서는 절대 안 된다.
'Java' 카테고리의 다른 글
[Effective Java] 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 (0) | 2021.08.04 |
---|---|
[Effective Java] 예외는 진짜 예외 상황에만 사용하라 (0) | 2021.08.02 |
[Effective Java] 지연 초기화는 신중히 사용하라 (0) | 2021.07.31 |
[Effective Java] 스레드 안전성 수준을 문서화하라 (0) | 2021.07.30 |
[Effective Java] wait와 notify보다는 동시성 유틸리티를 애용하라 (0) | 2021.07.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Today
- Yesterday
링크
TAG
- jvm
- 디자인패턴
- Effective JAVA
- iterable
- gslb
- exception
- Serialize
- Spring
- Concurrecy
- nosql
- 부하테스트
- object
- Java
- template
- Observer Pattern
- LAMBDA
- Serializable
- in-memory
- strategy
- 메인보드#asrock b650m #조립pc #후기이벤트
- concurrency
- Design Pattern
- reactive
- JMeter
- template method
- observable
- Redis
- jdk11
- reactive stream
- 영속성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함