Acessibilidade

Programação Concorrente - LEIC

Curso Licenciatura em Engenharia Informática e de Computadores
Unidade Curricular

Programação Concorrente

Obrigatória X
Opcional  
Área Científica Informática e Computadores
Ano: 3º Semestre:  ECTS: 6 Total de Horas: 162
Horas de Contacto T:67,5 TP: 67,5 PL: S: OT:
Docente

Pedro Miguel Henriques dos Santos Félix

T - Teórica; TP - Teórico-prática; PL - Prática Laboratorial; S - Seminário; OT - Orientação Tutorial.

  • Objetivos da aprendizagem

     

    Os estudantes que concluírem com sucesso esta unidade curricular serão capazes de:

    1. Compreender a importância da programação concorrente no desenvolvimento de software para os ambientes virtuais de execução mais utilizados (e.g., Java e .NET Framework);
    2. Dominar os mecanismos de suporte à programação concorrente, assíncrona e paralela disponíveis nos ambientes virtuais de execução;
    3. Desenvolver aplicações concorrentes e assíncronas tirando partido dos frameworks existentes e dos processadores multi-core disponíveis em virtualmente todos os sistemas computacionais atuais.
  • Conteúdos programáticos

     

    1. Fundamentos: thread safety; partilha de objetos; composição de objetos; componentes.
    2. Estruturação de aplicações concorrentes assíncronas: modelos de invocação assíncrona; execução e cancelamento de tasks; thread pools; aplicações concorrentes com interface gráfica com o utilizador.
    3.  Liveness, desempenho e teste: como prevenir hazards; desempenho e escalabilidade; teste de programas concorrentes.
    4.  Tópicos avançados: conceito de monitor; locks explícitos em Java; conceção de sincronizadores específicos baseados no conceito de monitor; modelos de memória; variáveis atómicas e sincronização non-blocking.
    5.  Programação paralela: principais padrões de desenho.

     

  • Demonstração da coerência dos conteúdos programáticos com os objetivos de aprendizagem da unidade curricular

    Nos últimos 30 anos, o desempenho dos computadores foi determinado pela Lei de Moore; atualmente, o desempenho é determinado pela Lei de Amdahl. Escrever código para tirar partido dos múltiplos processadores disponíveis nos sistemas computacionais pode ser muito exigente. A UC tradicional de Sistemas Operativos (que os alunos frequentaram no semestre anterior) não é suficiente para dotar os estudantes dos conceitos e técnicas necessárias para desenvolver aplicações corretas e escaláveis para os sistemas computacionais atuais e futuros. Assim, esta UC complementa e expande os conceitos e técnicas ensinadas anteriormente, tomando como referência os ambientes virtuais de execução mais utilizados no desenvolvimento de aplicações cliente e servidoras. 

     

  • Metodologias de ensino (avaliação incluída)

    Ensino teórico-prático com 15 aulas de 1,5 horas e 15 aulas de 3 horas. O tempo total de trabalho do estudante é de 162 horas. As aulas teórico-práticas destinam-se à apresentação dos conceitos e técnicas e de exemplos práticos de aplicação (aprendizagem baseada em casos). Cada estudante resolve, em laboratório aberto, três séries de exercícios práticos, abordando todos os tópicos abordados na UC. Realiza-se avaliação escrita cobrindo os objetivos de aprendizagem 1 e 2. Adicionalmente, os objetivos de aprendizagem 1 a 3 são avaliados com base nas resoluções das séries de exercícios práticos.

     

    A nota final da UC é atribuída individualmente tendo por base a nota da avaliação escrita bonificada ou penalizada (até 3 valores) pela média da classificação atribuída às resoluções dos exercícios práticos das séries (na escala 0 a 100%). Para efeitos do cálculo da bonificação/penalização, considera-se neutra a classificação de 75%; classificações superiores bonificam e inferiores penalizam.

     

  • Demonstração da coerência das metodologias de ensino com os objetivos de aprendizagem da unidade curricular

    As aulas teórico-práticas são utilizadas para abordar os principais conceitos e técnicas da programação concorrente, assíncrona e paralela e a forma como os mesmos estão presentes nos ambientes virtuais de execução tomados como referência. Através desta metodologia, os estudantes são confrontados com problemas reais e com as soluções consideradas aceitáveis. Através da resolução das séries de exercícios, realizada individualmente em laboratório aberto e com apoio do docente, sempre que solicitado, cada estudante poderá, ao seu próprio ritmo, exercitar e consolidar os conceitos e técnicas abordadas nesta UC.

     

  • Bibliografia principal

     

    B. Goetz, Java Concurrency in Practice, Addison-Wesley Professional, 2006. ISBN 9780321349606

    J. Duffy, Concurrent Programming on Windows, Addison-Wesley Professional, 2008. ISBN 9780321434821

    R. Blewett, A. Clymer, Pro Asynchronous Programming with .NET, Apress, 2013. ISBN 9781430259206

    C. Champbel, R. Johnson, A. Miller, S. Toub, Parallel Programming with Microsoft .NET, Microsoft Press, 2010. ISBN 9780735651593

    C. Martins, Sincronização com Monitores na CLI e na Infraestrutura Java, 3ª edição, ISEL, 2009.