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

16

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

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

    
posta Zepee 18.02.2012 - 11:52
fonte

5 risposte

6

Questi sono i libri che ho trovato utili ultimamente:

Concurrency Java in pratica - dall'autore di molti utils di concorrenza di Java. Piuttosto specifico di Java, ma molto chiaro e informativo sui pericoli e le insidie dei thread.

The Art of Concurrency - non un scintillante trattato teorico come suggerisce il titolo, in realtà un po 'folk e compendio completo di utili consigli ed esempi.

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

Ci sono molte librerie di utility dedicate come gli Intel Threading Building Blocks o la Grand Central Station di Apple - generalmente hanno i loro manuali dedicati, che di solito sono abbastanza buoni, e comunque sono obbligatorie se vuoi fare qualcosa di grosso con loro .

    
risposta data 18.02.2012 - 12:44
fonte
4

Ho trovato questa risorsa di threading gratuita messa 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 raccomanderei a causa della combinazione di codice di esempio, spiegazioni passo passo del codice e diagrammi di sequenza e stato eccellenti che accompagnano gli esempi.

Il tutorial è suddiviso in cinque parti:

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

    
risposta data 16.04.2012 - 05:58
fonte
4

Ci sono molti modelli di concorrenza, quindi è meglio avere una buona idea di tutto prima di decidere quale scegliere. Per questo, consiglio il libro Sette modelli di concorrenza in sette settimane: quando i thread si sbrogliano . Controlla le recensioni e il sommario e puoi capire perché questo è un buon libro. Ed è anche recente (2014).

    
risposta data 17.04.2015 - 12:35
fonte
1

Ci sono ora strutture di threading nello standard C ++. Quindi, se vuoi imparare in C ++, ti suggerisco di leggere una semplice recensione della nuova funzionalità del linguaggio prima di passare a un'esercitazione generica sul threading. Quindi torna indietro e rivedi lo standard più in dettaglio più tardi.

In pratica, il threading è una di quelle cose che molte persone pensano di capire, ma non lo fanno. Sono andato a parlare da un ricercatore di analisi statiche che ha identificato le condizioni di gara in un database di ricerca IBM (Java), in un file system Linux (C) e in altri progetti piuttosto di alto profilo. Alcuni dei progetti sono stati scritti da esperti rispettati in concorrenza e threading. Tieni presente che creare codice thread-safe è difficile e che il gap di conoscenza non è esclusivo per coloro che lo riconoscono di per sé.

Anche se non ti aiuterà direttamente nella programmazione del gioco, ti consiglio di consultare alcuni tutorial MPI (scusate, nessun consiglio specifico). Mentre sembra difficile scrivere codice concorrente corretto con i thread, sembra piuttosto facile farlo con il passaggio dei messaggi. Indirettamente, la speranza è che l'esplorazione di diversi modelli di concorrenza aiuterà il tuo processo di pensiero a strutturare il tuo codice per essere sicuro per i thread.

    
risposta data 16.04.2012 - 16:51
fonte
1

Per informazioni sulla concorrenza, utilizzare un linguaggio progettato per la concorrenza. Golang è una buona scelta poiché ha un supporto integrato per la concorrenza e una sintassi simile a C che rende la lingua facile da apprendere per la maggior parte dei programmatori.

Ha messaggi che passano, 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 a usando MPI in C:

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

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

a := <-c

Per imparare vai in pratica, controlla il go tour, dove puoi scrivere, compilare ed eseguire il codice go nel tuo browser.

tour.golang.org

Per saltare alla parte della concorrenza

link

Il mio ex professore ha tenuto un corso breve molto popolare per gli studenti CS del primo anno sul tema della concorrenza. Per un'introduzione rapida ma approfondita a ciò che è la concorrenza, consiglio vivamente di leggere questo.

Concetti fondamentali della programmazione concorrente

    
risposta data 17.04.2015 - 07:28
fonte

Leggi altre domande sui tag