Coroutines são rotinas cooperativas que podem suspender sua execução para permitir que outras rotinas sejam executadas, permitindo a sensação de execução paralela em sistemas com um único processador e thread. No Kotlin, coroutines usam funções suspensas e contextos para gerenciar estado e execução. Canais permitem a comunicação assíncrona entre coroutines de forma semelhante a filas bloqueantes, mas suspensas.