Motivações
Em algum post anterior eu fiz a pergunta "Por que usar processamento paralelo/concorrente?". A resposta que eu dei no mesmo post se baseou em ganhos de eficiência. Esta talvez seja, sim, a principal motivação para usar processamento paralelo, especialmente em aplicações científicas. Mas não é a única possibilidade.
Além de alta eficiência, pode-se usar sistemas paralelos para alta disponibilidade. A idéia, neste caso, é ter uma rede com nós redundantes de forma que, mesmo se alguns nós falharem o sistema inteiro continua executando suas funções sem maiores problemas. É o mesmo tipo de redundância-como-tolerancia-a-falhas que encontramos em sistemas de disco RAID, servidores de bancos de dados e sondas espaciais da NASA. A questão aí, quando se lida com informações e processamento, é como manter os nós redundantes em sincronia para que a falha não seja percebida externamente: o nó redundante que entra em ação para substituir o nó problemático deve continuar exatamente onde ele parou.
Essa noção de redundância também encontra analogias na biologia. Os sistemas biológicos normalmente contem redundâncias, do código genético a partes macroscópicas de corpos que se regeneram, passando pelos neurônios no cérebro (de novo). Parece ser uma forma óbvia de criar sistemas robustos e tolerantes a falhas.
O que mais podemos levantar como motivos ? Alguns (por ex. Joe Armstrong, criador da linguagem Erlang) defendem que alguns sistemas são mais naturalmente modelados por tarefas concorrentes, ao invés de uma única sequencial. Além disso, podemos pensar em modularidade: se temos tarefas isoladas que se comunicam com as outras, mas cada uma fazendo seu trabalho, temos fronteiras de abstração mais administráveis e interfaces mais definidas, reduzindo o acoplamento; isso pensando em um modelo de concorrência com passagem assíncrona de mensagens. Componentes concorrentes com estado compartilhado (shared state) se tornam mais acoplados do que se fossem realizados sequencialmente. Essa é a diferença de abordagem de Erlang e outros versus o modelo de concorrência encontrado em linguagens populares como Java e C#.
Além do mais, do jeito que as coisas vão, em pouco tempo ninguém precisará mais pensar muito em motivos para usar o paralelismo: a tendência é realmente usar sistemas multi-processados e com processamento paralelo mesmo em equipamentos domésticos e consoles de video-game. Sistemas paralelos e distribuídos parecem ser o futuro da computação, em escalas e instâncias variadas.
Além de alta eficiência, pode-se usar sistemas paralelos para alta disponibilidade. A idéia, neste caso, é ter uma rede com nós redundantes de forma que, mesmo se alguns nós falharem o sistema inteiro continua executando suas funções sem maiores problemas. É o mesmo tipo de redundância-como-tolerancia-a-falhas que encontramos em sistemas de disco RAID, servidores de bancos de dados e sondas espaciais da NASA. A questão aí, quando se lida com informações e processamento, é como manter os nós redundantes em sincronia para que a falha não seja percebida externamente: o nó redundante que entra em ação para substituir o nó problemático deve continuar exatamente onde ele parou.
Essa noção de redundância também encontra analogias na biologia. Os sistemas biológicos normalmente contem redundâncias, do código genético a partes macroscópicas de corpos que se regeneram, passando pelos neurônios no cérebro (de novo). Parece ser uma forma óbvia de criar sistemas robustos e tolerantes a falhas.
O que mais podemos levantar como motivos ? Alguns (por ex. Joe Armstrong, criador da linguagem Erlang) defendem que alguns sistemas são mais naturalmente modelados por tarefas concorrentes, ao invés de uma única sequencial. Além disso, podemos pensar em modularidade: se temos tarefas isoladas que se comunicam com as outras, mas cada uma fazendo seu trabalho, temos fronteiras de abstração mais administráveis e interfaces mais definidas, reduzindo o acoplamento; isso pensando em um modelo de concorrência com passagem assíncrona de mensagens. Componentes concorrentes com estado compartilhado (shared state) se tornam mais acoplados do que se fossem realizados sequencialmente. Essa é a diferença de abordagem de Erlang e outros versus o modelo de concorrência encontrado em linguagens populares como Java e C#.
Além do mais, do jeito que as coisas vão, em pouco tempo ninguém precisará mais pensar muito em motivos para usar o paralelismo: a tendência é realmente usar sistemas multi-processados e com processamento paralelo mesmo em equipamentos domésticos e consoles de video-game. Sistemas paralelos e distribuídos parecem ser o futuro da computação, em escalas e instâncias variadas.
0 Comments:
Post a Comment
<< Home