2010-02-01 10 views
9

Penso a me stesso come sviluppatore abbastanza decente, tuttavia quando si tratta di multithreading sono un n00b totale. Voglio dire, l'unico multithreading che ho fatto al lavoro era la roba di base come la generazione di thread multipli usando il ThreadPool per fare un po 'di lavoro in background. Nessuna sincronizzazione era necessaria e non è mai stato necessario creare thread manualmente.Alla ricerca di un buon esercizio per aiutarmi a migliorare il multithreading

Quindi, la mia domanda è questa; Voglio scrivere alcune applicazioni che dovranno essere pesantemente multithread e che dovranno fare tutte le cose avanzate come la sincronizzazione ecc. Non riesco a pensare a niente da scrivere. Ho pensato di provare a scrivere il mio ThreadPool, ma penso di dover imparare a camminare prima di poter correre. Quindi, quali idee possono suggerire qualcuno? Non deve avere alcun uso del mondo reale, può essere totalmente inutile e inutile, ma voglio solo migliorare. Ho letto tonnellate di articoli e tutorial su tutta la teoria, ma l'unico modo per migliorare VERAMENTE è farlo. Quindi, qualche idea?

+5

Prova a infilare la macchina da cucire di mia moglie. Quella cosa esegue più thread di M $ Office 2000 –

+0

ba-dum, tishhhh. – QueueHammer

risposta

7
  1. Ordinamento rapido ricorsivo. Confronta il tempo di ordinamento in funzione del numero di thread.
  2. Simulatore di craps. Quanti lanci di dadi puoi fare al minuto?
  3. Crawler della pagina Web. Dagli un URL e scarica tutte le pagine e le immagini dei bambini. Guarda le pagine che fanno riferimento l'un l'altro in modo da non entrare in un ciclo infinito. Si noti che i thread bloccheranno in attesa della risposta di rete, fornendo un utilizzo della CPU diverso rispetto ai puri thread basati sul calcolo. Utilizzare una coda per tenere traccia delle pagine non lette e di un dizionario per tenere traccia dei thread attivi. I thread che scadono tornano in coda.
  4. server Web WCF. Crea una nuova discussione per ogni richiesta. Scrivi un client WPF multi-thread che aggiorna l'interfaccia utente in tempo reale.

È sufficiente?

+1

Scritto il Web Crawler. Ottima idea! È stato davvero divertente. Dovendo rendere sicuro il thread della coda e la cache che teneva traccia degli URL già controllati era solo l'esercizio di cui avevo bisogno. Grazie! Proverò a provare il server Web WCF. – BFree

3

Che ne dici di una specie di app di elaborazione batch inutile? Generare una quantità orrenda di dati in un singolo thread e scaricarli in un file, quindi iniziare a suddividere il lavoro in thread di dimensioni diverse e scaricarli in un altro file, cronometrarli e confrontare i file alla fine per garantire l'ordine è la stessa. Questo ti porta in multi-threading, locking, mutex e cosa no e mostra anche i vantaggi del multithreading di determinate attività rispetto all'elaborazione in un singolo thread.

La prima cosa che mi è venuta in mente. Potrebbe essere noioso e/o inutile, ma non sparare al messaggero! :)

+0

Suggerimento interessante. Non sono sicuro di comprendere appieno cosa intendi con "cronometrici e confrontare i file alla fine per assicurarti che l'ordine sia lo stesso" – BFree

+0

Mi spiace - intendo il tempo impiegato in una singola discussione, quindi il tempo impiegato in 2, 3, 4, n discussioni ecc. –

3

Credo che si dovrebbe attirare l'attenzione per questo i libri:

  1. Windows via C/C++ di Jeffrey Richter. Questo è uno dei migliori libri sul multithreading
  2. Concurrent Programming on Windows di Joe Duffy. Un altro libro eccellente su multithreading

articoli Eccellenti da Herb Sutter (Herb, siamo tutti in attesa per il vostro nuovo libro!)

Effective Concurrency serie

Alcuni blog:

  1. Herb Sutter's blog.
  2. Parallel programming with .Net
  3. Jeffrey Richter's Blog
  4. Joe Duffy's blog

P.S. Che ne dite di Power Threading come esempio di multithreading (e implementazione ThreadPool)?

+0

+1 per jeffrey ritcher; ama i suoi libri ... –

+0

Ottimo materiale di lettura, ma voglio davvero scrivere del codice. Ho letto abbastanza ... – BFree

+0

Forse prova ad implementare il server socket multithreaded? O qualche semplice calcolo multithread? –

Problemi correlati