Coroutine is a routine which can yield. Coroutines are typically scheduled cooperatively (=non-preemptively). Coroutines are similar to threads, although threads are typically scheduled preemptively (scheduler pre-empts=forces execution to pause and yield, even without yield in the language)