Baixe o app para aproveitar ainda mais
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.
Compartilhar