Em ciência da computação, corotina é um componente de um programa de computador que generaliza subrotinas para permitir múltiplos pontos de entrada e a suspensão e o resumo da execução em determinados pontos do código. Corotinas são adequadas para a implementação de componentes como multitarefa, iterador, avaliação preguiçosa e canalização.
O termo foi originado por Melvin Conway em um artigo de 1963.[1] Comparação com subrotinas Corotinas são mais genéricas que subrotinas. Enquanto o tempo de vida das subrotinas é ditado pela pilha de execução (a última subrotina chamada é a primeira a retornar), o tempo de vida das corotinas é ditado por seu uso e necessidade. O início de uma subrotina é o ponto de entrada. Elas só podem retornar uma vez; em contraste, corotinas pode retornar (trocar de contexto) diversas vezes. O início de uma corotina é o primeiro ponto de entrada, pontos seguintes de entrada são seguidos de comandos de troca de contexto. Praticamente, a troca de contexto retorna o resultado para a corotina que a invocou, assim como uma subrotina. Entretanto, a próxima vez que a corotina é chamada, a execução é iniciada em um ponto logo após a invocação de troca de contexto.
Segue um exemplo simples da utilidade de corotinas. Suponha que existe uma relação produtor-consumidor em que uma rotina cria itens e os adiciona a uma fila, e outra rotina remove itens da fila e os usa. O código é o seguinte:
Var f := aloca Fila
Corotina produtor
Enquanto f != cheio Faça
// Cria itens na fila
troca de contexto para Consumidor
Fim Enquanto
Fim Corotina
Corotina Consumidor
Enquanto f != vazio Faça
// Remove itens da fila
troca de contexto para Produtor
Fim Enquanto
Fim Corotina
A fila é então completamente preenchida ou esvaziada antes da troca de contexto para outra corotina usado o comando de troca de contexto (geralmente com o nome yield). Novas chamadas à corotina começam no ponto logo após o comando de troca de contexto
Corrotina, ou co-rotina, é um componente utilizado para generalizar o uso de sub-rotinas e com isso permitir várias entradas diferentes de forma concorrente, ou seja, várias tarefas podem ser executadas ao mesmo tempo sem que uma interfira na outra.
Enquanto uma sub-rotina é algo mais específico uma co-rotina é algo mais genérico. Co-rotinas são criadas em formato de pilhas e como toda pilha, sua execução se dá por meio de crescimento e decrescimento.
Como as co-rotinas são mais genéricas e possuem uma execução concorrente, podemos ter várias sendo executadas ao mesmo tempo sem que uma interfira em nada na execução de outras.
- O item está correto, pois cada co-rotina possui sua própria pilha e o funcionamento de uma não interfere em nada o uso de outras, pois são concorrentes.
GABARITO: CERTO
FONTE: Professor Heitor Pasti