Співпрограма
З Вікіпедії, безкоштовно encyclopedia
Співпрограма або співпроцедура (англ. Coroutine) — компонент програми, що узагальнює поняття підпрограми, додатковою підтримкою безлічі точок входу (а не однієї, як підпрограма) і зупинку та продовження виконання із збереженням певного положення. Співпрограми є гнучкішими і узагальненішими, ніж підпрограми, але рідше використовуються на практиці. Застосування співпрограм, будучи методикою ще асемблера, практикувалося лише деякими високорівневими мовами, наприклад Simula і Modula-2. Співпрограми добре придатні для реалізації багатьох схожих компонентів програм (ітераторів, нескінченних списків, каналів, волокон).
Ця стаття не містить посилань на джерела. (грудень 2019) |
Співпрограма має початкову точку входу і розташовані всередині послідовності повернень і наступних точок входу. Підпрограмма може повертати керування лише одного разу, співпрограма може повертати керування багаторазово. Час роботи підпрограми відзначається принципом 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