quarta-feira, 6 de agosto de 2008

Análise e Crítica: "Software and the Concurrency Revolution'' e ``The Problem with Threads

A programação concorrente é uma dos pontos chaves a qual faculta o paralelismo de tarefas e, em tese, possibilita o aumento na performance de uma aplicação. Entretanto, as atuais soluções para programação paralela traz ao programador problemas sérios às suas aplicações. Threads e sincronização de blocos, apesar de dominar as abordagens para programação concorrente, tendem a ser na maioria das vezes bastante confuso e de grande risco devido ao não determinismo associado. Além disso, o uso de "locks" para acesso concorrente a dados aumenta as chances de ocorrência de deadlocks, além de exigir que programadores sigam convenções rígidas para garantir tal tarefa.

Neste domínio, Sutter[1] e Lee[2] discutem os problemas associados e os desafios para alcançar aplicações concorrentes mais eficientes e sem gargalos. O foco está nas implicações da concorrência para os softwares e suas consequências para os desenvolvedores, linguagens e ferramentas de programação, além do estudo profundo das threads e suas alternativas. Uma das soluções propostas é a utilização de lock-free programming para permitir que múltiplas threads leiam e escrevam em dados compartilhados sem a preocupação de inconsistências. Entretanto, exige que o programador possua conhecimento profundo do modelo de memória utilizado, além de ser de difícil implementação. Sutter também considera que a programação paralela exige melhores ferramentas para sistematicamente dar suporte a descoberta de erros, debug, descoberta de gargalos e auxílio nos processos de testes das aplicações. Sem essas ferramentas, a concorrência será um fator que poderá reduzir a produtividade do desenvolvedor e do responsável pelos testes, tornando os sistemas concorrentes mais caros e de baixa qualidade. Em contrapartida, Lee enfatiza as diversas abordagens para corrigir problemas de concorrências em threads através da enorme eliminação do comportamento não determinístico, sendo um melhor processo de engenharia de software um dos fatores para suprir esta deficiência. Uma das soluções citadas é o projeto Ptolemy II Kernel, um ambiente de modelagem com suporte a modelos computacionais concorrentes. Lee também propõe outras alternativas à threads. Entre elas, destaca-se o método Rendezvous Director o qual provou-se eliminar possíveis deadlocks.

Por fim, ambos os autores concordam que o não determinismo deve ser cuidadosamente empregado e determinar onde de fato este precisa ser aplicado. Devido a esta característica intrísica das threads, acho que as soluções propostas e discutidas nos papers são de fundamental relevância no que tange alcançar eficientes técnicas de paralelismo e ferramentas de auxílio em tarefas para programação concorrente. Além disso, acredito que as tentativas das atuais linguagens de programação em incorporar técnicas para dar suporte à aplicações multithreads não conseguiram evoluir de forma plausível para acompanhar o crescimento das tecnologias de hardware.

Thiago Sales

[1] Herb Sutter and James Larus. Software and the concurrency revolution. ACM Queue, 3:54–62, 2005
[2] Edward A. Lee. The problem with threads. Computer IEEE, 39:33–42, 2005.

Nenhum comentário: