DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Dividir para Conquistar - Java Magazine 85

Programação Concorrente; mais especificamente, paralelização de algoritmos para aceleração do seu desempenho através do uso de várias CPUs ou núcleos de processamento. No artigo, focamos na conhecida técnica de “divisão e conquista”.






Dividir para Conquistar
Acelerando seus algoritmos no mundo multi-core
Técnicas e novas APIs para extrair o melhor desempenho de multiprocessadores

Nesta coluna, o leitor veterano poderá se lembrar de vários artigos já publicados sobre paralelismo e concorrência; em geral focados na tecnologia da JVM (“Concorrência e a JVM” – Edição 11) ou em APIs (“Concorrência no Java 5” – Edição 20). Um pouco mais recentemente, a Edição 68 trouxe o artigo “Aplicações Concorrentes em Java” de Ronald Blanc Rocha. Mas achei que já estava na hora de voltar ao assunto, e também de tentar uma abordagem diferente.
O plano dessa vez é partir dos problemas em direção às soluções. Apresentaremos ao leitor alguns problemas clássicos de programação – algoritmos de busca e ordenação. Veremos como acelerá-los através de uma técnica específica (pattern?), a Divisão e Conquista; mostraremos o código necessário, implementado através da API java.util.concurrent. Poderemos assim aprofundar esta técnica, conhecer suas dificuldades e casos especiais, etc. de maneira prática e realista.

O Paralelismo resolve tudo?
Há alguns dias um colega disse: “Temos essa aplicação, assim e assado..., e processa 200 transações por segundo, mas precisamos chegar a 600 transações por segundo.” Brincando (mas nem tanto), comentei: “É muito fácil, use um servidor com 600 cores!”
A brincadeira é apenas parcial, pois um servidor com 600 núcleos não é mais ficção científica. Já se pode encontrar tal paralelismo numa só máquina; só não se trata ainda de algo acessível a qualquer data center. Mas chegaremos lá em pouco tempo. No entanto, assim como a contagem crescente de Gigahertz no passado, a atual escalada do multi-core não irá resolver todos os nossos problemas de desempenho. Problemas possíveis:
•    As transações usam algum recurso compartilhado, por exemplo caches, dados de configuração, ou canais de output (até algo tão simples quanto um objeto Logger);
•    Transações fazem lock de registros compartilhados num SGBD, forçando outras transações que também precisam do mesmo lock a esperar na fila;
•    Mesmo sem nenhum lock, o SGBD não consegue executar mais que certo número de transações por segundo, pois o paralelismo de I/O de disco é limitado (se bem que isso tende a melhorar, com a tecnologia de SSD substituindo discos).

Por outro lado, minha sugestão, ainda que fosse viável, não seria garantia de solução. Estes problemas quase sempre aparecem quando a concorrência ultrapassa determinado limite. Então não adianta jogar mais CPUs no servidor, que não teremos melhoria da taxa de transações (ou requests, etc.) por unidade de tempo.

Divisão e Conquista: Alô Mundo
Problema: Localizar o maior valor num array gigante de dados desordenados
Este tipo de problema conduz facilmente à técnica paralela de “divisão-e-conquista”, que pode ser descrita genericamente de forma simples: divida seus dados em duas ou mais partes independentes, processe estas partes em paralelo, e no final unifique os resultados de cada parte. É uma excelente técnica quando esta divisão é possível, ou seja, quando os dados de entrada (ou transações concorrentes etc.) são fáceis de separar em partes independentes.
"


ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



[Este post ainda não foi associado a uma sequência]
Publicidade
Autor
Osvaldo Pinali Doederlein

é Mestre em Engenharia de Software Orientado a Objetos e Arquiteto de Tecnologia da Visionnaire Informática, trabalhando em projetos de software e prospecção tecnológica.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03