MOTIVAÇÃO

A programação concorrente é muito mais do que apenas explorar o paralelismo que nos é oferecido pelas arquitecturas actuais. Usada correctamente, permite que o software reaja rapidamente a eventos, seja simples, eficiente, distribuído e tolerante a falhas. Os quatro modelos abordados neste curso pretendem dar uma visão abrangente do panorama da programação concorrente e paralela.   

Threads e sincronização: tem como principais vantagens a alargada aplicabilidade e a facilidade com que é integrado em diversas linguagens de programação. Possui, no entanto, alguns inconvenientes bem conhecidos que iremos discutir.

 Programação funcional: as linguagens funcionais são cada vez mais usadas, por diversas razões. Entre elas está claramente o seu excelente suporte para concorrência e paralelismo. Ao eliminar a mutabilidade de estado, os programas funcionais são intrinsecamente thread-safe e facilmente paralelizáveis.

 Actores: um modelo de programação concorrente de uso genérico com elevado grau de aplicabilidade. Pode ser usado em arquiteturas de memória partilhada e distribuída, facilita a distribuição geográfica do código e fornece um suporte particularmente elevado à tolerância a falhas e resiliência do código.

Paralelismo ao nível dos dados: Sabias que tens um supercomputador escondido dentro do teu portátil? A placa gráfica usa o paralelismo ao nível dos dados para acelerar o processamento gráfico, mas pode ser usado num leque muito mais abrangente de cenários. Se pretendes escrever código que envolve um elevado processamento numérico, a sua performance bate quase tudo o resto.