Korutin

Från Wikipedia

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.