Cozinha Paralela
Um restaurante em 3D com 1, 2 ou 4 cozinheiros-robôs. Distribua os pedidos, veja quanto o paralelismo ganha, ache o gargalo e provoque um impasse quando dois robôs querem a mesma panela.
Como usar
O restaurante: chegaram 8 pedidos. Cada robô cozinha os pedidos que você der a ele, um depois do outro. Cortar, picar e espremer cada robô faz na própria tábua, mas a cozinha tem uma panela e uma frigideira só, e cada robô leva 1 minuto para ir buscar cada utensílio.
Experimente: escolha 1, 2 ou 4 robôs, distribua os pedidos (ou use “Distribuir automaticamente”) e aperte “Cozinhar”. Compare o tempo do turno e veja, na linha do tempo, quem trabalhou, quem esperou e quem ficou parado. O macarrão precisa da panela e da frigideira ao mesmo tempo, e o risoto também. O que acontece se cada um pegar primeiro um utensílio diferente?
Arraste o fundo da cena para girar; use a roda do mouse ou dois dedos para aproximar. Pelo teclado: Tab até a cena, setas giram e as teclas + e − aproximam. Todos os comandos também estão nos botões e no painel, e a linha do tempo mostra o turno inteiro sem precisar da cena.
- cozinhando
- indo buscar um utensílio
- esperando um utensílio
- parado, sem pedidos
Minuto 0
Cozinheiros-robôs
Pedidos do turno
Desafios
- Cozinhe o turno com 1 robô e depois com 4 robôs. Quantas vezes mais rápido ficou? Por que não ficou 4 vezes?
- Com 2 robôs, distribua os pedidos à mão até alcançar o menor tempo possível.
- Provoque um impasse: dois robôs parados para sempre, cada um segurando o utensílio de que o outro precisa.
- Ligue a regra da cozinha e cozinhe sem impasse, com o macarrão e o risoto em robôs diferentes.
Para o professor
O que está por trás: cada robô é um processador (ou núcleo) e cada pedido é uma tarefa. Dividir as tarefas entre vários robôs é paralelismo: o turno acaba antes. Mas a panela e a frigideira são recursos compartilhados, e só um robô usa cada uma por vez. Quando dois robôs querem a mesma panela há concorrência, e um deles espera. Por isso 4 robôs não deixam a cozinha 4 vezes mais rápida: a panela vira o gargalo, e o tempo que ela fica ocupada é um limite que nenhum robô a mais consegue baixar (é a ideia da Lei de Amdahl). O desequilíbrio também pesa: se um robô recebe pedidos demais, os outros ficam parados esperando o turno acabar.
O impasse (deadlock): o macarrão pega a panela e depois a frigideira; o risoto pega a frigideira e depois a panela. Se os dois começam juntos, cada robô segura um utensílio e espera o outro para sempre. Para acontecer um impasse são necessárias quatro condições ao mesmo tempo: o recurso só pode ser usado por um de cada vez, quem segura um recurso espera por outro, ninguém tira o recurso de quem está segurando e há uma espera em círculo. A regra “sempre a panela antes da frigideira” quebra o círculo: é a mesma solução usada em sistemas operacionais e bancos de dados, que dão uma ordem fixa aos recursos.
Metodologia sugerida: comece com a atividade desplugada do plano de aula (dobrar folhas sozinho e em grupo, uma tesoura só para todos). Depois, em duplas, os alunos usam a página com estas perguntas:
- Com 1, 2 e 4 robôs, quanto tempo levou o turno? Montem uma tabela e calculem o ganho (tempo com 1 robô dividido pelo tempo com vários).
- Na linha do tempo, quantos minutos a panela ficou ocupada? Seria possível terminar o turno em menos tempo do que isso?
- Com 2 robôs, qual distribuição deu o menor tempo? Por que dividir o número de pedidos igualmente nem sempre é a melhor escolha?
- Como vocês provocaram o impasse? Que regra o evita? Onde isso acontece fora da cozinha (duas pessoas editando o mesmo documento, dois carros num cruzamento)?
Habilidade: EF08CO05 (paralelismo, concorrência e processamento distribuído). Combina com o plano de aula “Muitas mãos: paralelismo e sistemas distribuídos”. Material concreto equivalente: cartões de tarefa com o tempo de cada passo, uma única panela de brinquedo e uma frigideira, e alunos fazendo o papel dos robôs com um cronômetro.