No ano passado, tenho trabalhado muito em concorrência em Java e construí e trabalhei em muitos pacotes simultâneos. Então, em termos de desenvolvimento no mundo concorrente, estou bastante confiante. Além disso, estou muito interessado em aprender e entender mais sobre programação simultânea.
Mas eu sou incapaz de me responder o que vem depois? Que extra devo aprender ou trabalhar para herdar mais habilidades relacionadas ao processamento multinúcleo. Se houver algum livro interessante (leia e apreciei 'simultaneidade na prática' e 'programação simultânea em java') ou recursos relacionados ao processamento multinúcleo para que eu possa passar para o próximo nível?
concurrency
multi-core
Jatin
fonte
fonte
Respostas:
Isenção de responsabilidade - eu não sou especialista em concorrência, mas meu co-autor é: estou imitando ele :-)
Desde que você leu os livros de Doug Lea e Brian Goetz, você definitivamente cobriu o melhor material disponível até hoje.
Avançando, há os novos aprimoramentos de simultaneidade no Java 7. Mais notavelmente, a estrutura Fork / Join e as novas APIs NIO assíncronas.
O Java 8 apresentará outras melhorias de simultaneidade com coleções lambdas / paralelas.
Outra coisa a considerar seriamente é formas alternativas de lidar com a simultaneidade. Para ser franco, a abordagem de "bloquear objetos mutáveis" do Java sempre estará sujeita a erros, não importa o quanto as APIs sejam aprimoradas. Portanto, recomendo olhar o modelo de ator de Scala e o STM de Clojure como formas alternativas de lidar com problemas de concorrência, mantendo a interoperabilidade com Java.
[warning -> self Advertisement] Então, naturalmente, recomendo o nosso próximo livro, The Well-Grounded Java Developer , que cobre todas as coisas que mencionei acima: -). [/ warning]
Para que eu não esqueça, o Groovy também possui uma lib Gpars altamente recomendada, mas não a usei pessoalmente.
fonte
A linguagem de programação D fornece dois paradigmas para a programação simultânea, os quais têm seus usos e são bastante interessantes.
std.concurrency fornece passagem de mensagem sem compartilhamento de memória padrão. Todas as variáveis globais e estáticas em D são thread-local por padrão e
spawn
esend
não permitem o envio de mensagens que contêm engano ponteiro mutável. O compartilhamento limitado pode ser obtido através dashared
palavra - chave, o que implica uma verificação adicional pelo sistema de tipos. Fora do dialeto seguro do idioma, você pode forçar variáveis globais / compartilhadas clássicas no estilo C / Java usando a__gshared
palavra - chave, mas todas as apostas estão desativadas até a segurança da corrida. Este modelo é detalhado em um capítulo gratuito do livro de Andrei Alexandresu "The D Programming Language".std.parallelism é menos seguro, mas de certa forma mais flexível que std.concurrency e é voltado especificamente para paralelismo de dados e tarefas multicore para aumentar a taxa de transferência de processamento de dados em vez da simultaneidade de casos gerais. Ele possui um loop foreach paralelo, chamadas de funções assíncronas, reduções paralelas, etc. Ele fornece mecanismos para facilitar a gravação de códigos seguros para corridas, mas isso ainda requer algum grau de disciplina.
Uma discussão mais aprofundada sobre os dois principais paradigmas de multithreading em D pode ser encontrada em meu recente artigo sobre o assunto.
fonte
Eu sugiro fortemente que você vá e dê uma olhada no Clojure
A abordagem da concorrência é muito nova e, a meu ver, um avanço significativo no que você vê em Java e na maioria das outras linguagens. Alguns pontos-chave:
Eu sugiro assistir a este vídeo como uma introdução
fonte
Dê uma olhada na linguagem Scala, que estende Java e é executada na JVM. Ele empresta a noção de "atores" de Erlang e oferece boa capacidade para lidar com falhas de simultaneidade.
fonte
Se você deseja elevar esse nível a um nível totalmente novo, convém analisar a programação com o CUDA .
Isso permite que você distribua seus algoritmos por centenas de núcleos de processamento em sua placa gráfica, em vez dos poucos núcleos principais da CPU. Existem até ligações de idiomas que aparentemente tornam relativamente fácil acelerar linguagens de alto nível como python usando técnicas de GPGPU .
fonte
Simultaneidade de programação na JVM: Mastering Synchronization, STM e Actors discute a programação simultânea em Scala, Clojure, JRuby e Groovy.
Você obterá um entendimento bastante sólido das diferentes abordagens de simultaneidade.
Onde está o seu sorriso?
fonte