실행할 스레드가 많을 때, 어떤 스레드를 얼마나 오랫동안 실행할지 결정하는 것은 스레드 스케줄러다. 제대로 된 운영체제라면 공평한 결정을 내리려 애쓰겠지만, 그 정책은 바뀔 수 있다. 따라서 좋은 프로그램이라면 스케줄링 정책에는 의존하지 말아야 한다 정확성을 보장하거나 성능을 높이기 위해 스레드 스케줄러에 의존하는 프로그램은 이식성이 떨어진다.
그렇다면 스케줄러에 의존성을 낮으면서 이식성이 좋은 프로그램은 어떻게 개발하여야 할까? 실행 가능 스레드의 평균적 수가 프로세서 수보다 너무 많아지지 않도록 하는 것이다. 그렇게 했을 때 스레드 스케줄러가 할 수 있는 일이라고는 그저 더 이상 실행할 수 없을 때까지 실행 가능한 스레드를 실행하는 것뿐이다.
실행 가능 스레드의 갯수를 최소한으로 유지하려면 어떻게 해야할까? 그것은 스레드가 필요한 일을 하고 나서 다음에 할 일을 기다리게 만드는 것이다. 스레드는 필요한 일을 하고 있지 않을 때는 실행 중이어서는 안된다.
요약
프로그램의 정확성을 스레드 스케줄러에 의존하지 말아야 한다. 그런 프로그램은 잔정적이지도 않고 이식성이 보장되지 않는다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[직렬화]규칙74. Serializable 인터페이스를 구현할 때는 신중하라 (0) | 2017.05.09 |
---|---|
[병행성]규칙73. 스레드 그룹은 피하라 (0) | 2017.05.08 |
[병행성]규칙71. 초기화 지연은 신중하게 하라 (0) | 2017.05.08 |
[병행성]규칙70. 스레드 안전성에 대해 문서로 남겨라 (0) | 2017.05.08 |
[병행성]규칙69. wait나 notify 대신 병행성 유틸리티를 이용하라 (0) | 2017.05.08 |