Buscar

Atividade 3 PARADGMAS DE LINGUAGEM DE PROGRAMAÇÃO - Prova 29092020

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Atividade 3 – Paradigmas de Linguagem de Programação 
Aluno – Ronie Camilo – UAM – Jacareí - SP 
Curso – Ciências da Computação – Semestre 4 / 2020 
 
Muitas vezes, o paradigma concorrente tende a ser utilizado junto ao paralelismo de 
forma intercambiável, mas, na verdade, significam duas coisas diferentes: 
 
O paradigma concorrente refere-se à quando várias operações estão progredindo 
durante o mesmo período. Isso não significa que elas tenham que ocorrer exatamente 
ao mesmo tempo. Por exemplo, dois processos que trocam a execução em uma 
máquina de núcleo único são um exemplo de simultaneidade. Paralelismo, por outro 
lado, é um caso especializado de simultaneidade, em que várias operações estão 
progredindo ao mesmo tempo. Por exemplo, executar dois threads em uma máquina 
de núcleo duplo significa que ambos os threads podem ser executados ao mesmo 
tempo. É um caso de paralelismo. Há também outra forma chamada de programação 
distribuída, o que significa que as operações estão ocorrendo em máquinas diferentes. 
Isso geralmente é um pouco mais complexo, pois agora é necessário o gerenciamento 
de vários processos e também várias máquinas! 
 
É possível também ouvir o termo threading ou multi-threading. Pense em um 
encadeamento como o local de trabalho: quando um aplicativo precisa fazer duas ou 
mais coisas ao mesmo tempo, normalmente ele gera encadeamentos para lidar com 
cada tarefa. Esses encadeamentos podem ser executados simultaneamente ou em 
paralelo, dependendo do sistema. De qualquer forma, a chave é que o trabalho está 
sendo realizado em várias partes ao mesmo tempo. Isso cria soluções realmente 
eficazes, mas também uma série de complexidades para o controle e desenvolvimento. 
 
A grande razão pela qual esse tipo de programação realmente decolou recentemente 
são as restrições físicas dos processadores. Nas últimas duas décadas, o poder de 
processamento aumentou exponencialmente, mas, devido às restrições físicas, está 
ficando cada vez mais difícil tornar as aplicações mais rápidas. Por esse motivo, os 
computadores começaram a adicionar mais processadores ao sistema, em vez de criar 
processadores mais rápidos. 
 
Por causa disso, está se tornando cada vez mais importante desenvolver aplicativos 
que tirem vantagem de todos os processadores de um computador. Se você estiver 
executando apenas em um único núcleo, estará deixando muita coisa em cima da mesa. 
Até os telefones celulares estão começando a rodar em processadores dual e quad-
core, e espera-se que os desenvolvedores os usem com todo o seu potencial. É 
provável que essa tendência não pare tão cedo, por isso, é importante, para quem 
desenvolve soluções para esse cenário, entender o funcionamento desse paradigma de 
desenvolvimento. 
 
Embora seja benéfico usar toda a potência do computador, existem alguns problemas 
comuns que surgem ao trabalhar dessa maneira. Tudo isso geralmente tem a ver com 
vários threads tentando acessar a memória compartilhada. Descreva, com suas 
palavras, os possíveis problemas que podem surgir ao utilizar o paradigma concorrente 
de forma distribuída, utilizando-se de mais de um processador para um sistema. Pense 
sobre os desafios com: Race conditions, DeadLock e LiveLock. 
Resolução: 
 
Race Condition (Condição de corrida) 
 
Definição: Uma condição de corrida é uma falha em um sistema ou processo em que o 
resultado do processo é inesperadamente dependente da sequência ou sincronia de 
outros eventos. Apesar de ser conhecido em português por 'condição de corrida' uma 
tradução melhor seria 'condição de concorrência' pois o problema está relacionado 
justamente ao gerenciamento da concorrência entre processos teoricamente 
simultâneos. O fenômeno pode ocorrer em sistemas eletrônicos, especialmente em 
circuitos lógicos, e em programas de computador, especialmente no uso de multitarefa 
ou computação distribuída. 
Deadlock (Inter bloqueio, blocagem, impasse) 
Definição: No contexto de sistemas operacionais (SO), refere-se a uma situação em que 
ocorre um impasse, e dois ou mais processos ficam impedidos de continuar suas 
execuções - ou seja, ficam bloqueados, esperando uns pelos outros.Trata-se de um 
problema bastante estudado em sistemas operacionais e banco de dados, pois é 
inerente à própria natureza desses sistemas. 
 
O deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um 
ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro 
processo, o qual, por sua vez, aguarda a liberação de outro recurso alocado ou dependente 
do primeiro processo. 
 
Livelock () 
Definição: Na computação simultânea, um impasse é um estado no qual cada membro 
de um grupo de ações está aguardando que outro membro libere um bloqueio. 
Um livelock é semelhante a um impasse, exceto que os estados dos processos 
envolvidos no livelock mudam constantemente um em relação ao outro, nenhum 
progredindo. Livelock é um caso especial de inanição de recursos; a definição geral 
afirma apenas que um processo específico não está progredindo. 
Um exemplo real de livelock ocorre quando duas pessoas se encontram em um corredor 
estreito, e cada uma tenta ser educada movendo-se para o lado para deixar o outro 
passar, mas elas acabam balançando de um lado para o outro sem progredir, porque 
ambas se movem repetidamente da mesma maneira ao mesmo tempo. 
Livelock é um risco em alguns algoritmos que detectam e se recuperam de um conflito. 
Se mais de um processo executar uma ação, o algoritmo de detecção de deadlock 
poderá ser acionado repetidamente. Isso pode ser evitado, garantindo que apenas um 
processo (escolhido aleatoriamente ou por prioridade) tome medidas. 
Concorrência versus Paralelismo 
 
A programação concorrente, ou escrever software concorrente, pode ser bastante 
complicado. Primeiro devem ser identificados aspectos concorrentes no problema a ser 
resolvido. Depois, o programa deve ser capaz de gerenciar como os dados são 
acessados e compartilhados entre as tarefas. Portanto a interação, comunicação e a 
coordenação entre as tarefas são as questões centrais de um sistema concorrente. 
Quanto ao paralelismo, seria o tratamento de uma tarefa complexa, que é dividida em 
um conjunto de tarefas menores relacionadas que cooperam entre si para a realização 
da tarefa maior, e são processadas de maneira independente e simultânea em múltiplas 
unidades de processamento (cores e CPU’s). A programação paralela é a aplicação da 
concorrência. Não existe paralelismo sem concorrência. 
 
Conclusão: 
Não existe a base de hardware instalada necessária hoje para alavancar o 
desenvolvimento em larga escala de sistemas concorrentes. Claro que é possível o 
desenvolvimento de software em paradigma concorrente para um processador com 
apenas um núcleo, porém não é aí que o paradigma é mais bem utilizado. Além disso, 
é necessário um maior grau de conhecimento e treinamento do desenvolvedor para 
chegar a bons resultados sem problemas de controle dos threads. As linguagens de 
programação oferecem bibliotecas e compiladores para o desenvolvimento, porém não 
há grande interesse na mudança de paradigma, ainda é difícil hoje encontrar pessoas 
que deixem as facilidades do paradigma estruturado. A programação concorrente exige 
tempo, investimento em treinamento, depuração e testes maiores, pois existem mais 
situações a prever e maiores possibilidades de erros ou conflitos nas aplicações devido 
à necessidade de sincronia perfeita entre os threads.

Continue navegando