Coroutines generalize subroutines to allow multiple entry points for suspending and resuming execution at certain locations.cooperative tasks, exceptions, event loop,iterators, infinite lists and pipes.