Come praticheresti la concorrenza e il multi-threading? [chiuso]


33

Ho letto della concorrenza, del multi-threading e di come "il pranzo gratis è finito" . Ma non ho ancora avuto la possibilità di usare MT nel mio lavoro.

Sto quindi cercando suggerimenti su cosa potrei fare per fare un po 'di pratica di CPU pesante MT attraverso esercizi o partecipazione ad alcuni progetti open source.

Grazie.

Modifica: sono più interessato a progetti open source che utilizzano MT per attività legate alla CPU o semplicemente algoritmi che sono interessanti da implementare usando MT, piuttosto che libri o documenti che descrivono solo strumenti come thread, mutex e blocchi, o come MT può essere utilizzato per avere GUI reattive ...



5
D: Come praticheresti la concorrenza e il multi-threading? A: giocoleria
Steven A. Lowe

@Steven: non molto lontano, davvero.
Robert Harvey,

Il link "Il pranzo libero è finito" è morto
Utente

Dovrebbe essere ok ora ...
Xavier Nodet,

Risposte:


15

L'articolo di Joseph Albahari su Threading in C # è una delle migliori risorse che abbia mai visto.

Il sommario è di seguito. Si noti che alcuni degli argomenti, come la Libreria parallela attività, sono specifici di .NET, ma gran parte di esso è applicabile ad altre lingue, in particolare 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

Puoi anche dare un'occhiata al tutorial di Jon Skeet qui: http://www.yoda.arachsys.com/csharp/threads/


3
Aggiungo la pagina di mutlithreading c # di Jon Skeet alla tua risposta: yoda.arachsys.com/csharp/threads

1
In secondo luogo, i 5 capitoli di Albahari sono stati estremamente utili. Per esercitarti, ecco un semplice esercizio: crea un gioco multiplayer tic-tac-toe usando WCF (se conosci) e una semplice interfaccia utente: prova ad aggiornare i controlli dell'interfaccia utente con le risposte di ciascun giocatore. Hai controllato il codice firefox?
Narayana,

ti dispiacerebbe spiegare di più su ciò che fa e perché lo consigli come rispondere alla domanda posta? Le "risposte solo link" non sono del tutto benvenute allo Stack Exchange
moscerino del

1
@gnat: ho incollato il sommario nella mia risposta.
Robert Harvey,

Il collegamento al tutorial di Jon Skeet non sembrava funzionare (stavo ottenendo una pagina Azure 404) - ecco un archivio: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare il

13

Java Concurrency in Practice è uno dei migliori libri sul multi-threading e sulla concorrenza. Sebbene tutti gli esempi nel libro siano basati su Java, questo libro fornisce una solida spiegazione del mondo MT. Mi ha aiutato molto quando stavo sviluppando un sistema MT.


3
+1 buon libro. Ed è Java Concurrency in Practice, non Action.
Talonx,

8

Il capitolo 11 del libro Intel Threading Building Blocks di James Reinders è dedicato ad esempi di algoritmi e progetti che fanno uso di Parallel Computing (o Parallel Programming): un cercatore di sottostringhe, Game of Life, A Sieve of Eratosthenes, Matrix Multiply e quindi altri argomenti più avanzati come il filtro dei pacchetti di rete e i giochi.


4

Ho trovato la programmazione concorrente su Windows di Joe Duffy molto utile. C'è molta profondità. Non ti dà alcun pugno, quindi hai davvero una buona sensazione di quanti modi ci sono per spararti al piede. Mi ha aiutato a essere prudente, che è il miglior consiglio che posso dare a chiunque inizi con le app MT.


2

C'è una differenza tra concorrenza e parallelismo. La concorrenza è l'atto di fare più di una cosa alla volta, come scrivere su 2 file. Il parallelismo è l'atto di accelerare i programmi utilizzando più core.

Anche se non c'è pranzo libero quando si tratta di concorrenza, in parallelo il pranzo sta sicuramente diventando più gratuito, vedi sviluppi come http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


2
La tua distinzione è errata. La concorrenza è l'atto di completare più attività in periodi di tempo sovrapposti senza necessariamente fare più di una cosa in un dato momento . Il parallelismo è l'atto di fare più di una cosa in un dato momento.
Asad Saeeduddin,

Se si sovrappongono, stai facendo più di una cosa alla volta.
dan_waterworth,

Se i loro orari di inizio e fine si sovrappongono, ciò non indica che entrambe le attività procedono contemporaneamente in un determinato momento. Dati due elenchi di numeri interi da sommare, o puoi ottenere due persone per sommare ciascun elenco in modo indipendente e simultaneo, che è sia simultaneo che parallelo, oppure puoi sederti e alternare tra il riepilogo delle voci in un elenco e le voci nell'altro elenco, che è simultaneo ma non parallelo.
Asad Saeeduddin,

Non ho detto che stavano accadendo contemporaneamente. Ho detto di fare più di una cosa alla volta.
dan_waterworth,

Fare più di una cosa alla volta equivale a fare due cose contemporaneamente. Se si verificano più cose in un determinato momento, si verificano contemporaneamente.
Asad Saeeduddin,

1

Questo sito ha alcuni buoni esempi di progetti in generale. www.planet-source-code.com

Basta scegliere una lingua e cercare il multi-threading. dovresti vedere un numero di progetti con codice sorgente disponibile.


Sono sorpreso che questo non sia stato ancora votato. Questa è l'unica risposta che ho visto che si concentra sulla domanda "come PRATICARE la programmazione parallela e simultanea". Ogni altra risposta affronta la domanda "come apprendere i concetti", che è una domanda diversa.
Josiah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.