В некоторых системах две или более задач должны обрабатываться посегментно, причем каждый сегмент выполняется с различной скоростью (рис. 7.4).
Рис. 7.4 — Организация сопрограмм
Использование сопрограмм может быть полезной управляющей структурой.
Сопрограмма — это такой вид программы, который сохраняет текущее состояние счетчика команд. Когда программа вызывается повторно, выполнение продолжается с адреса, записанного в счетчике программ, а не с начала программы.
Сопрограмма, возвращающая управление в процедуру X, определяется как resume X. Использование такого оператора языка PDL можно представить следующим образом:
call DATA;
goto Next_Statement;
/* Для элементов данных */
DATA: procedure;
declare FS, DV;
DV = значение данных 1;
resume FORMAT(FS);
call I/O – process(DV, FS);
DV = значение данных 2;
resume FORMAT(FS);
call I/O – process(DV, FS);
...
DV = значение данных n;
call I/O – process(DV, FS);
end DATA;
FORMAT: procedure(FS);
LOOP: FS = спецификация формата 1;
resume DATA(FS);
FS = спецификация формата 2;
resume DATA(FS);
...
FS = спецификация формата n;
goto LOOP;
end FORMAT;
Next_Statement:
...
Здесь каждая сопрограмма вызывает другую сопрограмму. Таким образом, программа обработки данных вызывает программу обработки формата до следующего элемента формата.
К сожалению, сопрограммы отсутствуют в широко распространенных языках программирования.