Співпрограма

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Співпрограмма або співпроцедура (англ. Coroutine) — компонент програми, що узагальнює поняття підпрограми, додатковою підтримкою безлічі точок входу (а не однієї, як підпрограма) і зупинку та продовження виконання із збереженням певного положення. Співрограми є гнучкішими і узагальненішими, ніж підпрограми, але рідше використовуються на практиці. Застосування співрограм, будучи методикою ще асемблера, практикувалося лише деякими високорівневими мовами, наприклад Simula і Modula-2. Співрограми добре придатні для реалізації багатьох схожих компонентів програм (ітераторів, нескінченних списків, каналів, спільних завдань).

Співпрограма має початкову точку входу і розташовані всередині послідовності повернень і наступних точок входу. Підпрограмма може повертати керування лише одного разу, співрограмма може повертати керування багаторазово. Час роботи підпрограми візначається принципом LIFO (остання викликана підпрограма завершується першою), час роботи співпрограми визначається її використанням і необхідністю.

Наведемо простий приклад використання співрограми. Нехай необхідно реалізувати зв'язок між споживачем і виробником, де одна частина програми створює елементи й поміщає їх у чергу, а інша видаляє їх та використовує. Наступний код реалізує це:

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

Див. також[ред.ред. код]


Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.