Impasse vs fome
A principal diferença entre impasse e fome é a relação de causa e efeito entre eles; é o impasse que causa a fome. Outra diferença interessante entre impasse e fome é que o impasse é um problema, ao passo que a inanição pode, às vezes, ajudar a sair de um impasse. No mundo da informática, ao escrever um programa de computador, haverá mais de um processo / thread que será executado simultaneamente, um após o outro, a fim de cumprir o serviço necessário para o programa. Portanto, para ter um sistema justo, o programador deve ter que garantir que todos os processos / threads receberão ou terão acesso suficiente aos recursos de que precisam. Do contrário, haverá um impasse e, mais tarde, isso levará à fome. Geralmente, um sistema justo não contém nenhum impasse ou fome. Deadlocks e inanição ocorrerão principalmente quando muitos threads estão competindo por recursos limitados.
O que é impasse?
Um conflito é uma condição que ocorre quando dois threads ou processos aguardam um ao outro para concluir a tarefa. Eles apenas desligam, mas nunca param ou terminam sua tarefa. Na ciência da computação, os deadlocks podem ser vistos em qualquer lugar. Em um banco de dados de transações, quando dois processos, cada um em sua própria transação, atualizam as mesmas duas linhas de informações, mas na ordem oposta, causará um deadlock. Na programação simultânea, um deadlock pode ocorrer quando duas ações concorrentes aguardam uma da outra para prosseguir. Em sistemas de telecomunicações, um deadlock pode ocorrer devido à perda ou corrupção de sinais.
Atualmente, o deadlock é um dos principais problemas em sistemas de multiprocessamento e computação paralela. Como solução, um sistema de travamento denominado sincronização de processos é implementado tanto para software quanto para hardware.
O que é fome?
No dicionário da ciência médica, a fome é o resultado da falta severa ou total de nutrientes necessários para a manutenção da vida. Da mesma forma, na ciência da computação, a fome é um problema encontrado quando vários threads ou processos aguardam o mesmo recurso, o que é chamado de deadlock.
Para sair de um deadlock, um dos processos ou threads deve desistir ou retroceder para que o outro thread ou processo possa usar o recurso. Se isso acontecer continuamente e o mesmo processo ou encadeamento tiver que desistir ou retroceder a cada vez, enquanto permite que outros processos ou encadeamentos usem o recurso, o processo ou encadeamento selecionado, que foi revertido, passará por uma situação chamada inanição. Portanto, para sair de um impasse, a fome é uma das soluções. Portanto, às vezes a fome é chamada de uma espécie de livelock. Quando há muitos processos ou threads de alta prioridade, um processo ou thread de baixa prioridade sempre morrerá de fome em um deadlock.
Pode haver muitas inanição, como fome de recursos e fome de CPU. Existem muitos exemplos comuns de fome. São o problema dos leitores-escritores e o problema dos filósofos jantares, que é mais famoso. Há cinco filósofos silenciosos sentados em uma mesa redonda com tigelas de espaguete. Garfos são colocados entre cada par de filósofos adjacentes. Cada filósofo deve pensar e comer alternadamente. No entanto, um filósofo só pode comer espaguete quando tem os garfos direito e esquerdo.
Os “Filósofos Jantar”
Qual é a diferença entre Deadlock e Starvation?
• Processo:
• Em deadlock, os dois threads ou processos aguardarão um pelo outro e ambos não prosseguirão.
• Na inanição, quando dois ou mais threads ou processos esperam pelo mesmo recurso, um fará rollback e permitirá que os outros usem o recurso primeiro e, em seguida, o thread ou processo faminto tentará novamente. Portanto, todos os threads ou processos continuarão de qualquer maneira.
• Rolling Back:
• Em um deadlock, ambos os threads / processos de alta prioridade, bem como os threads / processos de baixa prioridade, esperarão um pelo outro infinitamente. Nunca acaba.
• Mas, em uma fome, os de baixa prioridade vão esperar ou retroceder, mas os de alta prioridade continuarão.
• Esperando ou Bloquear:
• Um impasse é uma espera circular.
• A fome é uma espécie de livelock e às vezes ajuda a sair de um impasse.
• Impasse e fome:
• Um impasse causa inanição, mas a inanição não causa um impasse.
• Causas:
• Um impasse ocorrerá devido à exclusão mútua, espera e espera, sem preempção ou espera circular.
• A fome ocorre devido à escassez de recursos, gerenciamento descontrolado de recursos e prioridades de processo.
Resumo:
Impasse vs. fome
Deadlock e fome são alguns dos problemas que ocorrem devido a corridas de dados e condições de corrida que ocorrem durante a programação, bem como implementação de hardware. Em um deadlock, duas threads aguardarão infinitamente uma pela outra sem executar, enquanto, em uma situação de inanição, uma thread será revertida e deixará a outra thread usar os recursos. Um deadlock causará inanição, enquanto a inanição ajudará um thread a sair de um deadlock.
Cortesia de imagens:
- Computador por Steve Jurvetson de Menlo Park, EUA (CC BY 2.0)
- The “Dining Philosophers” de Bdesham (CC BY-SA 3.0)