프로세스, 스레드, 컨텍스트 스위치의 기본 개념은 아래 게시글 참고
2022.08.28 - [JAVA] - [Java] 멀티 스레딩 - 프로세스(Process), 스레드(Thread), 컨텍스트 스위치(Context Switch)
각 스레드의 도착 시간과 작업 시간이 정해진 경우 스케줄링 비교
: 도착한 순서대로 실행
[문제점]
- 작업 시간이 긴 스레드가 먼저 도착 시 다른 스레드의 *기아현상 발생
- 특히 UI 스레드의 지연 시 어플리케이션의 응답성 방해하여 사용성에 최악임
* 기아현상
: 작업시간이 짧은 스레드가 작업시간이 긴 스레드에 의해 실행되지 못하는 상태
: 작업시간이 짧은 스레드를 먼저 실행
[문제점]
- 작업 시간이 짧은 UI 이벤트는 자주 발생되어 계속 앞에 배치
- 연산이 필요한 긴 스레드는 영원히 실행하지 못함
위와 같은 문제점으로 인해 평등하게 스레드를 분배해서는 안된다.
이제 일반적으로 운영체제에서 사용하는 방법을 확인해보자.
: *에포크에 맞춰 시간을 적당한 크기로 나누고 스레드를 시간단위로 나누어 종류별로 에포크에 할당
운영체제가 에포크에 맞게 시간을 적절히 나누고 스레드의 타임 슬라이스를 각 에포크에 할당한다.
모든 스레드가 에포크에 할당되어 실행되거나 완료되지 않는데, 운영체제가 각 스레드에 동적 우선순위를 적용해 시간을 할당한다.
* 에포크(Epoch, = Unix Time)
: 1970년 1월 1일 00:00:00 UTC 부터 현재까지 누적된 초의 값, Unix를 개발한 벨 연구소에서 정의하여 Unix Time이라고도함
ex) JAVA의 System.currentTimeMillis()
: 정적 우선순위 (Static Priority) + 보너스(Bonus)
=> 즉각적인 반응으로 응답성을 높이고, 기아 현상을 막는다.
[Java] 멀티 스레딩 - 프로세스(Process), 스레드(Thread), 컨텍스트 스위치(Context Switch) (0) | 2022.08.28 |
---|---|
스프링 프로젝트 기동 오류 (0) | 2022.01.14 |
[spring] 용어 - 계속 추가할 예정 (0) | 2022.01.13 |
[spring] 게시글 삭제/수정 (0) | 2021.04.15 |
[spring] BoardService 목록 처리 (0) | 2021.04.13 |