기아 상태

Starvation

한 작업이 계속 자원을 얻지 못해 다른 작업이 진행하는 동안에도 멈춥니다.

···
html
<div class="v"><header><b>STARVATION</b><span id="state"></span></header><main><div class="queue"><div class="arrival" id="arrival"></div><div class="low" id="low">LOW PRIORITY · waiting</div><div class="cpu" id="cpu"></div></div></main><footer>high priority keeps winning</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,3.2vmin,17px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.28} .queue{height:100%;display:flex;flex-direction:column;justify-content:center;gap:8px}.arrival{display:flex;gap:4px;min-height:36px}.arrival b{flex:1;max-width:23%;border:1px solid var(--line);border-radius:5px;display:grid;place-items:center;font:600 clamp(12px,2.7vmin,16px) var(--font-sans, sans-serif)}.low,.cpu{border:1px solid var(--line);border-radius:5px;padding:6px;text-align:center;font:600 clamp(12px,2.7vmin,16px) var(--font-sans, sans-serif)}.low{color:var(--accent-2)}.cpu{color:var(--accent)}
js
let n=0;function draw(){const count=n+1;document.getElementById("arrival").innerHTML=Array.from({length:count},(_,i)=>"<b>H"+(i+1)+"</b>").join("");document.getElementById("low").textContent="LOW PRIORITY · waits "+count+" turns";document.getElementById("cpu").textContent="CPU → H"+count;document.getElementById("state").textContent="turn "+count;n=(n+1)%4}draw();setInterval(draw,900)

기아 상태에서는 시스템 전체가 멈추지 않아도 특정 작업이 공유 자원이나 실행 시간을 오래 얻지 못합니다. 우선순위가 높은 작업이 계속 들어오면 낮은 우선순위 작업은 계속 뒤로 밀릴 수 있습니다.

교착 상태와 달리 다른 작업은 계속 진행합니다. 공정한 대기열, 우선순위 상승, 긴 임계 구역 분할은 대기 시간을 제한하는 방법입니다. 데모는 높은 우선순위 요청이 낮은 작업을 밀어내는 과정을 보여줍니다.

언제 쓰나

우선순위 큐나 잠금 대기에서 일부 요청만 오래 멈출 때 진단합니다.

페이지로 열기 ↗