Aktivní čekání

Aktivní čekání je v programování označení pro takovou část počítačového programu, která v rámci podmíněného cyklu sama aktivně opakovaně ověřuje, zda už byla podmínka splněna, a v mezičase provádí nanejvýš nějaké jalové operace, například nulové instrukce. Situace, kdy by „čekání“ programu na splnění podmínky bylo správné implementovat neustálým dotazováním, zda už je splněna, jsou vzácné, v typických situacích aplikačního programování se jedná o návrhový antivzor.

Podoba alternativy k aktivnímu čekání závisí na tom, za jakým účelem mělo být použito. Například je-li smyslem aktivního čekání spustit nějakou akci až v uvedený čas, je správným řešením zavolání takové funkce operačního systému, která daný proces odloží a vzbudí jej až v daný čas. Má-li být smyslem aktivního čekání synchronizace s jiným procesem, bude správnějším řešením použít vhodné synchronizační primitivum. Obecně ale platí, že místo neustálého dotazování na podmínku a tím zatěžování procesoru by mělo být čekání na podmínku vyřešeno prostředky operačního systému, jehož plánovač může čekající proces efektivně uspat a procesor raději přidělovat jiným procesům, dokud není podmínka splněna.

Není-li z nějakých důvodů možné použít rozhraní operačního systému přímo pro čekání na danou podmínku, je vhodné alespoň implementovat líné aktivní čekání, kdy je mezi každým testováním podmínky na určitou konstantní dobu předáno řízení operačnímu systému. Většinu času pak proces stráví spaním, jen čas od času je operačním systémem vráceno řízení, proces si zkontroluje, zda už je podmínka splněna, a pokud ne, opět požádá operační systém, aby jej vzbudil až za určitý čas k další kontrole.

Reference

V tomto článku byly použity překlady textů z článků Aktives Warten na německé Wikipedii a Busy waiting na anglické Wikipedii.