Uma nota sobre escalonamento cooperativo
Até agora falamos de um modelo escalonamento que é o preemptivo, e que atende de forma eficiente muitos sistemas operacionais modernos.
Mas antes mesmo do modelo preemptivo se tornar predominante, muitos sistemas utilizavam o escalonamento cooperativo. Nesse modelo, cada processo controlava explicitamente quando liberar a CPU para outros processos. Isso era feito ao atingir certos pontos no código em que o processo voluntariamente "cedia" o controle ao sistema operacional.
Daí o nome escalonamento cooperativo
Entretanto, o modelo cooperativo traz algumas limitações, pois um erro de programação como loop infinito por exemplo, pode fazer um processo monopolizar a CPU, caindo num cenário de CPU starvation para os outros processos.
Há também o fato de que o modelo cooperativo depende muito de uma boa implementação de cada programa, o que dificulta garantir tempos de resposta rápidos para tarefas críticas na CPU.
Mas calma, o modelo cooperativo tem suas vantagens...
O escalonamento cooperativo é usado em contextos específicos, como em sistemas embarcados simples ou em algumas linguagens de programação ou frameworks/bibliotecas que implementam concorrência cooperativa com o modelo de corrotinas - que vamos abordar mais a frente no guia.
Bom, se você prestou bem atenção até aqui, eu não fiz uma menção sequer a threads. É proposital, acho que devemos dissociar este conceito de concorrência às threads (em um primeiro contato)
Last updated