Como você praticaria simultaneidade e multi-threading? [fechadas]

33

Eu tenho lido sobre simultaneidade, multi-threading e como "o almoço grátis acabou" . Mas ainda não tive a possibilidade de usar o MT no meu trabalho.

Portanto, estou procurando sugestões sobre o que eu poderia fazer para obter alguma prática de MT pesado da CPU por meio de exercícios ou participação em alguns projetos de código aberto.

Obrigado.

Editar: estou mais interessado em projetos de código aberto que usam o MT para tarefas associadas à CPU ou simplesmente algoritmos interessantes para implementar usando o MT, em vez de livros ou documentos que descrevem apenas as ferramentas, como threads, mutexes e bloqueios, ou como o MT pode ser usado para ter GUIs responsivas ...

Xavier Nodet
fonte
1
Possivelmente de interesse: programmers.stackexchange.com/questions/24936/…
Orbling
5
P: Como você praticaria simultaneidade e multiencadeamento? A: por malabarismo
Steven A. Lowe
@ Steven: Não tão longe, realmente.
Robert Harvey
O link "o almoço gratuito acabou" está morto
Usuário
Deve estar ok agora ...
Xavier Nodet

Respostas:

15

O artigo de Joseph Albahari sobre Threading em C # é um dos melhores recursos que já vi.

O índice está abaixo. Observe que alguns dos tópicos, como a Biblioteca Paralela de Tarefas, são específicos do .NET, mas grande parte é aplicável a outras linguagens, especialmente Java.

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

Você também pode dar uma olhada no tutorial de Jon Skeet aqui: http://www.yoda.arachsys.com/csharp/threads/

Robert Harvey
fonte
3
Adicionei a página c # mutlithreading de Jon Skeet à sua resposta: yoda.arachsys.com/csharp/threads
1
Segundo, gostou dos 5 capítulos de Albahari extremamente úteis. Para praticar, aqui está um exercício simples - Crie um jogo da velha com vários jogadores usando o WCF (se você souber) e uma interface simples - tente atualizar os controles da interface do usuário com as respostas de cada jogador. Você verificou o código do firefox?
Narayana
você se importaria de explicar mais sobre o que faz e por que o recomenda como resposta à pergunta? "Respostas apenas para links" não são bem-vindas no Stack Exchange
gnat
1
@gnat: colei o índice na minha resposta.
Robert Harvey
O link para o tutorial de Jon Skeet não parecia estar funcionando (eu estava recebendo uma página do Azure 404) - aqui está um arquivo: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare
13

O Java Concurrency in Practice é um dos melhores livros sobre multiencadeamento e simultaneidade. Embora todos os exemplos do livro sejam baseados em Java, este livro fornece uma explicação sólida do mundo do MT. Isso me ajudou muito quando eu estava desenvolvendo um sistema de MT.

Sorantis
fonte
3
+1 bom livro. E é simultaneidade Java na prática, não ação.
talonx 31/12/10
8

O capítulo 11 do livro Intel Threading Building Blocks, de James Reinders, é dedicado a exemplos de algoritmos e projetos que fazem uso da Computação Paralela (ou Programação Paralela): um localizador de substring, o Jogo da Vida, uma Peneira de Eratóstenes, Matrix Multiply e outros tópicos mais avançados, como filtragem de pacotes de rede e jogos.

Xavier Nodet
fonte
4

Achei a programação simultânea no Windows de Joe Duffy muito útil. Há muita profundidade. Ele não dá nenhum soco, então você realmente tem uma idéia de quantas maneiras existem para dar um tiro no próprio pé. Isso me ajudou a ser cauteloso, que é o melhor conselho que posso dar a qualquer pessoa que comece com aplicativos MT.

Scott Whitlock
fonte
2

Há uma diferença entre simultaneidade e paralelismo. A simultaneidade é o ato de fazer mais de uma coisa por vez, como gravar em 2 arquivos. Paralelismo é o ato de acelerar programas usando vários núcleos.

Embora não haja almoço grátis no que diz respeito à simultaneidade, no paralelismo o almoço certamente está se tornando mais gratuito, veja desenvolvimentos como http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

dan_waterworth
fonte
2
Sua distinção está incorreta. A simultaneidade é o ato de concluir várias tarefas em períodos de tempo sobrepostos , sem necessariamente fazer mais de uma coisa a qualquer momento . Paralelismo é o ato de fazer mais de uma coisa a qualquer momento.
Asad Saeeduddin
Se eles se sobrepõem, você está fazendo mais de uma coisa de cada vez.
dan_waterworth
Se os horários de início e término se sobrepuserem, isso não indica que as duas tarefas estão prosseguindo simultaneamente a qualquer momento. Dadas duas listas de números inteiros a serem somadas, você pode fazer com que duas pessoas soquem cada lista independentemente e simultaneamente, o que é simultâneo e paralelo, ou você pode se sentar e alternar entre resumir as entradas em uma lista e as entradas na outra lista, que é simultânea, mas não paralela.
Asad Saeeduddin
Eu não disse que eles estavam acontecendo simultaneamente. Eu disse fazendo mais de uma coisa de cada vez.
precisa saber é o seguinte
Fazer mais de uma coisa de cada vez é o mesmo que fazer duas coisas simultaneamente. Se várias coisas estão ocorrendo em um determinado momento, elas estão ocorrendo simultaneamente.
Asad Saeeduddin
1

Este site tem alguns bons exemplos de projetos em geral. www.planet-source-code.com

Basta escolher um idioma e procurar multi-threading. você deve ver vários projetos com o código-fonte disponível.

Pemdas
fonte
Estou surpreso que isso ainda não tenha sido votado. Esta é a única resposta que vi que se concentra na pergunta "como praticar a programação paralela e simultânea". Todas as outras respostas abordam a questão "como aprender os conceitos", que é uma pergunta diferente.
Josiah