Interrupt versus polling: werking en keuzecriteria vergeleken
Er zijn twee manieren waarop een processor te weten komt dat een device aandacht nodig heeft. Bij polling controleert de CPU in een lus steeds opnieuw de status van het device. Bij een interrupt stuurt het device een signaal naar de CPU, die haar werk onderbreekt, een kleine handler uitvoert en daarna terugkeert. Polling is eenvoudig en voorspelbaar, maar verspilt tijd. Interrupts zijn efficiënt en reageren snel, maar geven overhead en maken het gedrag van het programma moeilijker te doorgronden.
| Kenmerk | Polling | Interrupt |
|---|---|---|
| Werking | De CPU leest herhaaldelijk een statusregister om te controleren of het device gereed is | Het device geeft een signaal en de CPU onderbreekt haar werk om een interrupt handler (ISR) uit te voeren |
| CPU tijdens het wachten | Bezig. Gebruikt cycli voor de controle | Vrij. Kan ander werk doen of slapen |
| Reactietijd | Bepaald door het interval tussen de controles in de lus. Voorspelbaar | Snel (microseconden). Maar afhankelijk van maskering, prioriteit en het opslaan van de context |
| Overhead | Constant, ook als er niets gebeurt | Kosten per gebeurtenis. Bij zeer veel gebeurtenissen kan de CPU het niet bijhouden (interrupt storm) |
| Complexiteit | Eenvoudig te schrijven en te debuggen | Complex. Handlers moeten kort zijn en gedeelde data met de hoofdcode vraagt zorg (volatile, atomaire toegang) |
| Vermogensverbruik | Houdt de CPU wakker | De CPU kan op laag vermogen slapen tot een gebeurtenis haar wekt |
| Voorspelbaarheid van de timing | Gemakkelijk te overzien | Concurrency-bugs tussen de handler en de hoofdcode zijn mogelijk |
| Belangrijkste toepassingen | Zeer snelle of continue gebeurtenissen, eenvoudige programma's, drivers voor snelle netwerken | Timers, knoppen, communicatiegebeurtenissen, sensoralarmen, wakker worden uit slaapstand |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.