Se você usa multitarefa cooperativa e tem um programa ruim: então sim, você está certo.
No entanto, no mundo real, o seguinte deve acontecer:
-
Multitarefa cooperativa: eu não passo a usar a CPU para sempre. Em vez disso, dará a chance a outro programa depois de algum tempo ou quando ele for bloqueado. A resposta de Paul descreve o segundo.
-
Multitarefa preventiva (usada praticamente em qualquer lugar): O sistema operacional (não o programa) fornecerá a CPU por um curto período de tempo a um programa e, em seguida, o removerá. Isso pode ser tão simplista quanto a execução de um cronômetro e, uma vez que expira, interrompe o processo e o entrega ao próximo nível / programa que está aguardando.
No seu caso, pense nisso como um escritório com dois trabalhadores e três (ou mais) tarefas.
(Vamos chamá-los de tarefa-A, tarefa-B e tarefa-C).
O primeiro trabalhou verifica as ordens dos supervisores que afirmam:
- Defina um temporizador 10 minutos. Quando ele parar, pare de trabalhar na sua tarefa atual, coloque-a na parte inferior da lista TODO e continue lendo este documento.
- Em seguida, remova o primeiro item da parte superior da lista TODO e comece a trabalhar nele.
- Repetir.
Trabalhador 1 define o temporizador e obtém a primeira tarefa da lista TODO (neste caso, a tarefa A).
O Trabalhador 2 faz a mesma coisa: define um temporizador e obtém o que está agora no topo da lista TODO. Desde que o trabalhador 1 removeu a tarefa A do trabalhador 2, agora começa na tarefa B.
Dez minutos depois, o timer se apaga. O trabalhador 1 pára de trabalhar na tarefa A e recebe as instruções dos supervisores. Esses estados colocam a tarefa atual na parte inferior da lista TODO. Continuando as instruções do supervisor, ele agora reinicia o timer e começa a trabalhar no que está agora no topo da lista TODO (que é task-C).
O Trabalhador 2 faz o mesmo e pára a tarefa B e começa com o topo da lista TODO (que no exemplo é tarefa-A)
Etc etc ..
Isso é um pouco simplificado. Mas isso deve lhe dar uma ideia de como dois passos (trabalhadores) podem trabalhar 100% do tempo em três ou mais tarefas.
Em agendadores reais, existem muitas outras coisas. Por exemplo. interrupções (compare com um telefone tocando no meio de uma tarefa e como lidar com isso), agendamento inteligente (dar a mesma tarefa para o mesmo trabalhador provavelmente resultará em uma conclusão mais rápida, já que o trabalhador já está familiarizado com ela), E / S (se um trabalhador precisar de um livro de uma biblioteca, ele não esperará até que o temporizador expire, mas continuará imediatamente com a próxima tarefa, etc. etc.