bem, realmente depende do que você está desenvolvendo. a resposta, dependendo do que você está desenvolvendo, pode variar de "é insignificante" a "é absolutamente crítico, e esperamos que todos na equipe tenham um bom entendimento e uso de implementações paralelas".
na maioria dos casos, um sólido entendimento e uso de bloqueios, encadeamentos e tarefas e conjuntos de tarefas será um bom começo quando a necessidade de paralelismo for necessária. (varia de acordo com lang / lib)
Acrescente a isso as diferenças de design que você deve fazer - para o multiprocessamento não trivial, é necessário aprender vários novos modelos de programação ou estratégias de paralelização. nesse caso, o tempo para aprender, para falhar o suficiente para ter um entendimento sólido e para atualizar os programas existentes pode levar uma equipe por ano (ou mais). depois de chegar a esse ponto, (espero!), você não perceberá nem abordará problemas / implementações como faz hoje (desde que ainda não tenha feito essa transição).
outro obstáculo é que você está efetivamente otimizando um programa para uma determinada execução. se você não tiver muito tempo para otimizar os programas, realmente não se beneficiará tanto quanto deveria. uma paralelização de alto nível (ou óbvia) pode melhorar a velocidade percebida do seu programa com bastante pouco esforço, e é o que muitas equipes vão fazer hoje: "Paralelizamos as partes realmente óbvias do aplicativo" - isso é bom em alguns casos. o benefício de pegar a fruta mais baixa e usar a paralelização simples será proporcional ao número de núcleos? muitas vezes, quando existem dois a quatro núcleos lógicos, mas não tão frequentemente além disso. em muitos casos, é um retorno aceitável, dado o investimento de tempo. esse modelo paralelo é a introdução de muitas pessoas para implementar bons usos do paralelismo.
o que você aprender usando esses modelos paralelos triviais não será ideal em todos os cenários paralelos complexos; A aplicação eficaz de projetos paralelos complexos requer uma compreensão e abordagem muito diferentes. esses modelos simples geralmente são desanexados ou têm interação trivial com outros componentes do sistema. também, muitas implementações desses modelos triviais não se adaptam bem a sistemas paralelos efetivamente complexos - um projeto paralelo complexo e ruim pode demorar tanto para ser executado quanto o modelo simples. doente: executa duas vezes mais rápido que o modelo de thread único, enquanto utiliza 8 núcleos lógicos durante a execução. os exemplos mais comuns estão usando / criando muitos threads e altos níveis de interferência de sincronização. em geral, isso é chamado de desaceleração paralela. é muito fácil encontrar se você abordar todos os problemas paralelos como problemas simples.
então, digamos que você realmente deva utilizar multithreading eficiente em seus programas (a minoria no clima de hoje): será necessário empregar o modelo simples de maneira eficaz para aprender o modelo complexo e, em seguida, reaprender como você aborda o fluxo e a interação do programa. o modelo complexo é onde seu programa deve estar, pois é onde o hardware está hoje e onde as melhorias mais dominantes serão feitas.
a execução de modelos simples pode ser vista como um garfo, e os modelos complexos operam como um ecossistema complexo. Eu acho que o entendimento de modelos simples, incluindo bloqueio geral e encadeamento, deve ou será esperado em breve para desenvolvedores intermediários quando o domínio (no qual você desenvolve) o usa. hoje, a compreensão de modelos complexos ainda é um pouco incomum (na maioria dos domínios), mas acho que a demanda aumentará rapidamente. como desenvolvedores, muito mais dos nossos programas devem oferecer suporte a esses modelos, e a maior parte do uso está muito atrasada na compreensão e implementação desses conceitos. Como a contagem lógica de processadores é uma das áreas mais importantes da melhoria de hardware, a demanda por pessoas que entendem e podem implementar sistemas complexos certamente aumentará.
finalmente, muitas pessoas pensam que a solução é apenas "adicionar paralelização". muitas vezes, é melhor acelerar a implementação existente. é muito mais fácil e muito mais direto em muitos casos. muitos programas na natureza nunca foram otimizados; algumas pessoas tiveram a impressão de que a versão não otimizada seria ofuscada pelo hardware em breve. melhorar o design ou algos dos programas existentes também é uma habilidade importante se o desempenho for importante - jogar mais núcleos nos problemas não é necessariamente a melhor ou mais simples solução.
Ao direcionar PCs modernos, a maioria de nós que precisa implementar bons sistemas paralelos não precisará ir além de multithreading, bloqueio, bibliotecas paralelas, livros que valem a pena ler e muita experiência em escrever e testar programas (basicamente, reestruturando significativamente como você programas de escrita de abordagem).