본문 바로가기
기타 공부

기아현상/경쟁상태

by 으노으뇨 2021. 10. 15.
728x90
반응형
SMALL

자바의 정석 쓰레드를 공부를 마치면서 기아현상/ 경쟁상태에 대해 의문점이 들어 한번 스스로 공부해보았다.

기아현상이란?

어떤 쓰레드가 다른 쓰레드들이 CPU시간을 모두 잡고 있어 CPU시간을 사용할 수 없게 되는 현상을 "기아상태(starvation)" 라 한다. 이 기아 쓰레드는 글자 그대로 "굶어 죽게" 된다. 다른 쓰레드들이 CPU시간을 사용하도록 되어 있기 때문이다. 기아상태의 해결책은 "공정성(fairness)" 이다. 공정성이란, 모든 쓰레드들이 자신의 작업을 수행할 기회를 공정하게 갖는 것을 의미한다.

즉, 결코 사용할 수 없는 자원을 무한정 기다리는 상태를 말한다.

내가 배운선에서 해결하는 방법 : notifyAll()또는 지정해서 notify() /signal(), signalALl()

또다르게

  • 프로세스 우선순위 수시 변경을 통해 각 프로세스 높은 우선순위를 가지도록 기회 부여
  • 오래 기다린 프로세스의 우선순위 높이기
  • 우선순위가 아닌 요청 순서대로 처리하는 요청큐 사용

경쟁상태란?

공유 자원에 대해 여러 개의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과 값에 영향을 줄 수 있는 상태 - 위키

공유되는 자원을 둘 이상의 프로세스가 동시에 접근하여 사용하는 경우에 발생

접근하는 순서, 프로세스의 실행 기간 등에 영향을 받기 때문에 매번 실행 결과가 달라지게 된다.

내가 배운선에서 해결하는 방법 : 임계영역을 설정하고 해당 영역안에서 작업이 되도록함, 한개의 쓰레드만

 

728x90
반응형
LIST

댓글