Quais são os melhores recursos para aprender sobre simultaneidade e aplicativos multithread? [fechadas]


16

Percebi que tenho uma enorme lacuna de conhecimento quando se trata de aplicativos multithread e programação simultânea. Eu cobri alguns princípios básicos no passado, mas a maior parte parece ter desaparecido da minha mente, e é definitivamente um campo que eu quero e preciso conhecer melhor.

Quais são os melhores recursos para aprender sobre a criação de aplicativos simultâneos? Sou uma pessoa muito prática, portanto, se o livro contiver exemplos concretos, melhor, mas estou aberto a sugestões. Pessoalmente, prefiro trabalhar em pseudocódigo ou C ++, e uma inclinação para o desenvolvimento de jogos seria melhor, mas não necessária.


Você prefere "trabalhar em pseudocódigo"? Espero que funcione para você! :)
logc 17/04/2015

Respostas:


6

Estes são os livros que achei úteis ultimamente:

Simultaneidade em Java na Prática - pelo autor de muitos dos utilitários de simultaneidade em Java. Um pouco específico de Java, mas muito claro e informativo sobre os perigos e armadilhas dos encadeamentos.

A Arte da Concorrência - não um tratado teórico cintilante como o título sugere, de fato um compêndio bastante popular e realista de conselhos e exemplos úteis.

Concorrência de programação na JVM - Na verdade, este é um tratado teórico cintilante, mas muito, muito legível e esclarecedor. Se você precisar saber o que são STM ou atores, quais são seus pontos fortes e fracos e por que , este livro lhe dirá.

Existem muitas bibliotecas de utilidades dedicadas, como os Intel Threading Building Blocks ou a Grand Central Station da Apple - geralmente eles têm seus próprios manuais dedicados, que geralmente são muito bons e, de qualquer forma, são de leitura obrigatória, se você quiser fazer algo grande com eles.


4

Eu encontrei este recurso de encadeamento gratuito oferecido por Joe Albahari excelente ...

Encadeamento em C #

É inclinado para C #, mas os conceitos são inteiramente aplicáveis ​​a outros idiomas. Ele também fornece o tutorial como um download em PDF em inglês e em vários outros idiomas. Eu o recomendaria devido à combinação de código de exemplo, explicações passo a passo do código e excelentes diagramas de sequência e estado que acompanham os exemplos.

O tutorial está dividido em cinco partes:

Está disponível em forma de livro aqui: C # 4.0 em poucas palavras (capítulos 23 e 24)


1
+1, este é meu costume "go-to" de referência para rosqueamento / concorrência / paralelismo em .NET
Matthew King


1

Agora existem instalações de encadeamento no padrão C ++. Portanto, se você quiser aprender em C ++, sugiro que você leia uma revisão simples do novo recurso de idioma antes de ir para um tutorial genérico de encadeamento. Depois, volte e revise o padrão com mais detalhes posteriormente.

Na prática, enfiar é uma daquelas coisas que a maioria das pessoas pensa entender, mas não entende. Fui para uma palestra de um pesquisador de análise estática que identificou condições de corrida em um banco de dados de pesquisa IBM (Java), em um sistema de arquivos linux (C) e em alguns outros projetos de alto nível. Alguns dos projetos foram escritos por respeitados especialistas em concorrência e encadeamento. Esteja ciente de que tornar difícil o código de thread-safe é difícil e que a lacuna de conhecimento não é exclusiva para aqueles que o reconhecem por si mesmos.

Embora isso não o ajude diretamente na programação de jogos, recomendo examinar alguns tutoriais da MPI (desculpe, sem recomendações específicas). Embora pareça difícil escrever código simultâneo correto com threads, parece bastante fácil fazê-lo com a passagem de mensagens. Indiretamente, a esperança é que a exploração de diferentes modelos de simultaneidade ajude seu próprio processo de pensamento ao estruturar seu código para ser seguro para threads.


1

Para aprender sobre simultaneidade, use um idioma que foi projetado para simultaneidade. O Golang é uma boa opção, pois possui suporte interno para simultaneidade e uma sintaxe semelhante ao C, que facilita o aprendizado da linguagem para a maioria dos programadores.

Possui passagem de mensagens, mutexes etc., que cobrem quase todas as suas necessidades de simultaneidade e que têm equivalentes mais complicados em outros idiomas.

Por exemplo, recebendo um int de outro thread na variável ausando MPI em C:

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

Recebendo um int na variável a de outro thread (usuário) em go:

a := <-c

Para aprender a praticar, consulte o tour em que você pode escrever, compilar e executar o código em seu navegador.

tour.golang.org

Para pular para a parte de simultaneidade

http://tour.golang.org/concurrency/1

Meu ex-professor realizou um curso muito popular para alunos do primeiro ano do ensino médio, sobre o tema simultaneidade. Para uma introdução rápida, mas completa, sobre o que é simultaneidade, eu definitivamente recomendo a leitura deste.

Fundamentos da programação simultânea

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.