Programação Concorrente e Distribuída
- Detalhes
- Categoria: Disciplina
- Documentação fornecida pelo docente da UC no Moodle. Downey, A. B. - Little Book of Semaphores. https://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf :Green Tea Press, 2016. Online. Goetz, B., Peierls, T., Bloch, J., Bowbeer, J., Holmes, D., Lea, D. - Java Concurrency in Practice. Addison-Wesley, 2006. Java Platform Standard Edition 8. https://docs.oracle.com/en/java/javase/22/docs/api/index.html. 2024 Hattingh, C. Using Asyncio in Python 3: Understanding Python's asynchronous programming features. O'Reilly Media, Inc. 2018.
- Engenharia Informática e Aplicações (L) (IPLUSO)
- 6615
- 24352
- Programação Concorrente e Distribuída
- IPLUSO6615-24352
- 3
- 6
- 0
- 4
- Não
- Português
- Utilização da metodologia de aprendizagem baseada em problemas, que permite que o aluno adquira conhecimentos, ao mesmo tempo que a execução do conjunto de procedimentos para a resolução dos problemas lhe permite desenvolver capacidades e competências. Esta metodologia promove a aprendizagem como parte da própria atividade desenvolvida para resolução do problema.
- Obrigatório
- OA1: Compreender o que é a programação concorrente, quais as suas principais características, e quais os mecanismos tipicamente envolvidos na sua programação; entender as noções de Secção Crítica, Corrida, Deadlock e Starvation, num programa concorrente. OA2: Compreender e utilizar primitivas de comunicação e sincronização; compreender e aplicar técnicas que previnam a ocorrências de erros como Corridas, Deadlocks e Starvation. OA3: Compreender e implementar os principais paradigmas de comunicação entre tarefas nas modernas linguagens de programação. OA4: Compreender as características dos programas distribuídos; compreender e utilizar sockets para implementar comunicação entre processos em sistemas distribuídos. OA5: Compreender e utilizar Remote Procedure Calls (RPC) na implementação de programas distribuídos, OA6: Compreender os conceitos básicos da programação baseada em eventos nos programas concorrentes e distribuídos, e escrever programas que respondam apropriadamente a eventos.
- CP1: Programação concorrente Processos; tarefas; concorrência; paralelismo; execução síncrona e assíncrona. Comunicação e sincronização; competição e cooperação; operações atómicas; secções críticas; starvation, deadlock e livelock. Utilização da memória; não-determinismo. CP2: Mecanismos para a programação concorrente Primitivas de sincronização: trincos, semáforos, monitores, barreiras, e filas bloqueantes. Prevenção de corridas, deadlocks e starvation. CP3: Utilização de programas concorrentes Ilustração dos paradigmas abordados. Problemas clássicos de sincronização. CP4: Sistemas Distribuídos Protocolos Internet; Família TCP/IP; Camada de aplicação; HTTP. Arquitetura cliente-servidor. CP5: Implementação de sistemas distribuídos usando sockets Biblioteca de sockets. Serialização. CP6: Implementação de sistemas distribuídos usando RPC Remote Procedure Calls. Implementações: gRPC, RMI, XML-RPC. CP7: Programação baseada em eventos Conceitos. Eventos em GUIs. Eventos em Sistemas Distribuídos.
Descrição
Data limite
Ponderação
Trabalhos práticos e exercícios
11-01-2025
50%
Testes escritos
11-01-2025
50%
Exame de Recurso
31-01-2025
100%
A avaliação final baseia-se numa componente prática, baseada em trabalhos práticos, participação nas aulas e assiduidade, e numa componente teórica baseada em testes escritos sobre os diferentes tópicos abordados. A componente prática terá um peso de 50% e a componente teórica terá um peso de 50%, na nota final. A nota mínima de ambas as componentes será de 9.5 valores.
O aproveitamento nesta UC está dependente da frequência de um mínimo de 75% das aulas lecionadas no semestre.
As componentes prática e teórica são requeridas em todas as épocas de avaliação.
Assim, a época de recurso pode consistir em:
- Exame escrito: para os alunos que não tiveram aproveitamento na componente teórica em avaliação contínua.
- (Re)Submissão dos trabalhos: para os alunos que não tiveram aproveitamento na componente prática em avaliação contínua.
- Exame escrito + (re)submissão dos trabalhos: para os alunos que não tiveram aproveitamento nem na componente teórica nem na componente prática em avaliação contínua.- Semestral
- Os sistemas de software atuais estão, cada vez mais, a tornar-se concorrentes e distribuídos como forma de tirarem partido das modernas arquiteturas multi-processador e dos ritmos e larguras de banda crescentes das redes de computadores. A concorrência baseada em memória partilhada dos sistemas multi-processador, e a concorrência baseada na troca de mensagens em sistemas distribuídos, partilham muitas abstrações e problemas comuns. Para poderem desenvolver programas concorrentes corretos e eficientes neste contexto, os programadores têm de compreender e utilizar um conjunto de paradigmas e primitivas que lhes permitam lidar com as arquiteturas subjacentes, que frequentemente executam instruções fora de ordem, e compiladores cujas otimizações afetam os resultados dos programas concorrentes. Este curso tem como intenção explorar as técnicas para o desenvolvimento de programas concorrentes e distribuídos.