Acessibilidade

Programação Concorrente - LEIC

Curso Engenharia Informática e de Computadores
Unidade Curricular

Programação Concorrente

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

Carlos Alberto Martins

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 terminam 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/CLI).

    (2) Dominar os mecanismos de suporte à programação concorrente próprios daqueles ambientes virtuais de execução.

    (3) Desenvolver aplicações concorrentes de média dimensão tirando efectivo partido dos processadores multi-core, disponíveis em muitos do actuais sistemas.

  • Programa

    I. Fundamentos: thread safety; partilha de objectos; composição de objectos; componentes.

    II. Estruturação de aplicações concorrentes: execução de tasks; cancelamento de tasks e shutdown de task executors; thread pools; aplicações GUI.

    III. Liveness, desempenho e teste: como prevenir liveness hazards; desempenho e escalabilidade; teste de programas concorrentes.

    IV. Tópicos avançados: locks explícitos; concepção de sincronizadores específicos; variáveis atómicas e sincronização non-blocking; modelos de memória.

  • Demonstração de coerência entre conteúdos programáticos e resultados da aprendizagem

    Nos últimos 30 anos, o desempenho dos computadores foi determinado pela Lei de Moore; de agora em diante, o desempenho será determinado pela Lei de Amdahl. Escrever código para explorar efectivamente múltiplos processadores 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 correctas e escaláveis para os sistemas actuais e do futuro. Assim, esta UC complementa 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.

  • Metodologia de ensino e avaliação

    Ensino teórico-prático, estando previstas 15 aulas teórico-práticas de 1,5 horas e 15 aulas teórico-práticas de 3 horas, a que correspondem 67,5 horas de contacto. O tempo total de trabalho do estudante é de 160 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).
    Além das aulas teórico-práticas, 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 objectivos de aprendizagem 1 e 2.
    Adicionalmente, os objectivos de aprendizagem 1 a 3 são avaliados com base nas resoluções das séries de exercícios práticos e da respectiva discussão.

  • Demonstração de coerência entre metodologias de ensino e resultados de aprendizagem

    As aulas teórico-práticas são utilizadas para abordar os principais conceitos e técnicas da programação concorrente 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

    Brian Goetz et al, Java Concurrency in Practice, Addison Wesley, 2006.

    Joe Duffy, Concurrent Programming on Windows, Addison Wesley, 2008.

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