Korutin
![]() | Den här artikeln behöver källhänvisningar för att kunna verifieras. (2020-09) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. |
Korutiner är inom datavetenskap programkomponenter som generaliserar subrutiner, för att därigenom tillåta olika ingångspunkter och att pausa och fortsätta körningen på vissa platser. Korutiner kom till som en teknik inom lågnivåspråk, men stöds även i vissa högnivåspråk, exempelvis Simula och Modula-2.
Ett exempel på nyttan av korutiner. Om man har ett konsument/producent-förhållande där en rutin skapar objekt och lägger dem i kö, och en annan rutin tar objekt från kön och använder dem, så vill man gärna effektivisera detta genom att lägga till och ta bort flera objekt åt gången. Koden skulle kunna se ut så här:
var q := new queue coroutine produce loop while q is not full create some new items add the items to q yield to consume coroutine consume loop while q is not empty remove some items from q use the items yield to produce
Varje korutin gör så mycket den kan innan den överlämnar kontrollen till den andra, med yield-kommandot. Den andra korutinen kan nu fortsätta där den slutade tidigare, och fortsätta att behandla kön.