Skip to main content

IPLUSO 24352

Programação Concorrente e Distribuída

Engenharia Informática e Aplicações (L) (IPLUSO)
  • ApresentaçãoPresentation
    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.
  • ProgramaProgramme
    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.
  • ObjectivosObjectives
    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.
  • BibliografiaBibliography
    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.  
  • MetodologiaMethodology
    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.
  • LínguaLanguage
    Português
  • TipoType
    Semestral
  • ECTS
    6
  • NaturezaNature
    Obrigatório
  • EstágioInternship
    Não