Coroutines
A coroutine is a subprogram that has multiple entries and controls them itself.
It is also called symmetric control.
It also has the means to maintain their status between activation.
This means that coroutines must be history sensitive and thus have static local vars.
Secondary executions of a coroutine often begin at points other than its beginning.
A coroutine call is named a resume.
The first resume of a coroutine is to its beginning, but subsequent calls enter at the point just after the last executed statement in the coroutine.