O algoritmo Multi-Threaded é necessário para utilizar processadores Multi-core?

Eu estava apenas imaginando se realmente precisaríamos que o algoritmo fosse muti-threaded se ele fizesse uso dos processadores multi-core ou o jvm faria uso de vários núcleos – embora nosso algoritmo seja seqüencial?

ATUALIZAR:

Pergunta relacionada:

  • Ordenação rápida ou de mesclagem Muti-Threaded em java

Não acredito que quaisquer implementações de JVM de produção atuais executem o multiencadeamento automático. Eles podem usar outros núcleos para garbage collection e outras tarefas domésticas, mas se seu código é expresso seqüencialmente, é difícil paralelizá-lo automaticamente e ainda manter a semântica precisa.

Pode haver algumas JVMs experimentais / de pesquisa que tentam paralelizar áreas de código que o JIT pode identificar como sendo constrangedoramente paralelas, mas eu não ouvi nada parecido para sistemas de produção. Mesmo que o JIT identificasse esse tipo de coisa, provavelmente seria menos eficaz do que projetar seu código para o paralelismo em primeiro lugar. (Escrevendo o código sequencialmente, você poderia facilmente acabar tomando decisões de design que dificultariam o paralelismo automático sem querer.)

Sua implementação precisa ser multiencadeada para aproveitar os múltiplos núcleos à sua disposição.

Seu sistema como um todo pode usar um único núcleo por aplicativo ou serviço em execução. Cada aplicativo em execução, no entanto, funcionará com um único encadeamento / núcleo, a menos que seja implementado de outra forma.

Java não dividirá automaticamente seu programa em threads. Atualmente, se você quiser que o código possa ser executado em vários núcleos de uma só vez, será necessário informar ao computador por meio de threads, ou algum outro mecanismo, como dividir o código em tarefas e as dependencies entre as tarefas do programa. No entanto, outras tarefas podem ser executadas simultaneamente nos outros núcleos, portanto, seu programa ainda pode ser executado mais rapidamente em um processador multicore se você estiver executando outras coisas simultaneamente.

Uma maneira fácil de tornar seu código atual paralizável é usar o JOMP para paralelizar loops e intensificar o poder de processamento, partes facilmente paralizadas do seu código.

Eu não acho que o uso de algoritmo multi-threaded fará uso de processadores multi-core de forma eficaz, a menos que codificado para a eficácia. Aqui está um bom artigo que fala sobre o uso de processadores multi-core para desenvolvedores –

http://java.dzone.com/news/building-multi-core-ready-java