Quali sono le migliori risorse per conoscere la concorrenza e le applicazioni multi-thread? [chiuso]


16

Mi sono reso conto di avere un enorme divario di conoscenza quando si tratta di applicazioni multi-thread e programmazione concorrente. Ho trattato alcune nozioni di base in passato, ma la maggior parte sembra essere passata dalla mia mente, ed è sicuramente un campo che voglio e di cui ho bisogno di essere più informato.

Quali sono le migliori risorse per imparare a costruire applicazioni simultanee? Sono una persona orientata molto alla pratica, quindi se detto libro contiene esempi concreti, meglio è, ma sono aperto a suggerimenti. Personalmente preferisco lavorare in pseudocodice o C ++ e una pendenza verso lo sviluppo del gioco sarebbe la cosa migliore, ma non necessaria.


Preferisci "lavorare in pseudocodice"? Spero che funzioni per te! :)
logc

Risposte:


6

Questi sono i libri che ho trovato utili di recente:

Concorrenza Java in pratica - dall'autore di molti programmi di utilità di concorrenza Java. Un po 'specifico di Java, ma molto chiaro e informativo sui pericoli e le insidie ​​dei thread.

L'Arte della Concorrenza - non un brillante trattato teorico come suggerisce il titolo, in realtà un compendio piuttosto folle e conciso di consigli utili ed esempi.

Concorrenza di programmazione sulla JVM - Questo in realtà è un trattato teorico scintillante, ma molto, molto leggibile e perspicace. Se hai bisogno di sapere cosa sono gli STM o gli attori, quali sono i loro punti di forza e di debolezza e perché , questo libro ti dirà.

Esistono molte librerie di utility dedicate come Intel Threading Building Blocks o la Grand Central Station di Apple - queste generalmente hanno i loro manuali dedicati, che di solito sono abbastanza buoni, e comunque sono obbligatori da leggere se vuoi fare qualcosa di grande con loro.


4

Ho trovato questa risorsa di threading gratuita creata da Joe Albahari eccellente ...

Threading in C #

È inclinato verso C # ma i concetti sono interamente applicabili ad altre lingue. Fornisce inoltre il tutorial come download PDF in inglese e in molte altre lingue. Lo consiglierei a causa della combinazione di codice di esempio, spiegazioni dettagliate del codice ed eccellenti diagrammi di sequenza e di stato che accompagnano gli esempi.

Il tutorial è suddiviso in cinque parti:

È disponibile in forma di libro qui: C # 4.0 in breve (capitoli 23 e 24)


1
+1, questo è il mio solito riferimento "go-to" per threading / concorrenza / parallelismo in .NET
Matthew King


1

Ora ci sono funzionalità di threading nello standard C ++. Quindi, se vuoi imparare in C ++, ti suggerisco di leggere una semplice recensione della funzionalità della nuova lingua prima di passare a un tutorial di threading generico. Quindi tornare indietro e rivedere lo standard in modo più dettagliato in seguito.

In pratica, il threading è una di quelle cose che la maggior parte delle persone pensa di capire, ma non lo fanno. Sono andato a un colloquio da un ricercatore di analisi statica che ha identificato le condizioni di gara in un database di ricerca IBM (Java), in un filesystem linux (C) e in alcuni altri progetti di alto profilo. Alcuni dei progetti sono stati scritti da esperti rispettati della concorrenza e del threading. Essere consapevoli del fatto che creare un codice thread-safe è difficile e che il gap di conoscenza non è esclusivo di coloro che lo riconoscono da soli.

Anche se non ti aiuterà direttamente nella programmazione del gioco, ti consiglio di guardare alcuni tutorial MPI (scusami, non ho consigli specifici). Mentre sembra difficile scrivere il codice simultaneo corretto con i thread, sembra piuttosto facile farlo con il passaggio di messaggi. Indirettamente, la speranza è che l'esplorazione di diversi modelli di concorrenza possa aiutare il proprio processo di pensiero a strutturare il codice in modo che sia thread-safe.


1

Per informazioni sulla concorrenza, utilizzare un linguaggio progettato per la concorrenza. Golang è una buona scelta in quanto ha il supporto integrato per la concorrenza e una sintassi di tipo C che rende il linguaggio facile da imparare per la maggior parte dei programmatori.

Ha passaggi di messaggi, mutex ecc. Che coprono quasi tutte le esigenze di concorrenza e che hanno equivalenti più complicati in altre lingue.

Ad esempio, ricevere un int da un altro thread in variabile ausando MPI in C:

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

Ricezione di un int in variabile a da un altro thread (utente) in go:

a := <-c

Per imparare vai in pratica, dai un'occhiata al tour go, dove puoi scrivere, compilare ed eseguire il codice go nel tuo browser.

tour.golang.org

Per saltare alla parte di concorrenza

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

Il mio ex professore ha tenuto un breve corso molto popolare per gli studenti del primo anno in CS sul tema della concorrenza. Per una rapida ma approfondita introduzione su cosa sia la concorrenza, consiglio vivamente di leggere questo.

Fondamenti di programmazione concorrente

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.