Qualcuno può suggerire un progetto per me scrivere per aiutarmi a capire il threading

12

Attualmente sono uno sviluppatore C # con una conoscenza abbastanza approssimativa del threading.

Entrambi questi link sono stati suggeriti in altri post:

link

link

Dovrei tornare alle origini e magari guardare alcuni testi informatici sull'argomento?

Sento davvero che se salto dentro e utilizzo le librerie c # non avrò davvero una base solida di conoscenza su cui costruire. Penso di aver bisogno di imparare questo argomento da zero come uno studente di fumetti, quindi usare le librerie C #.

Qualcuno può suggerire un approccio all'apprendimento del threading, forse alcuni link e / o idee di progetto?

Grazie in anticipo!

Modifica, grazie per tutte le risposte. Alcune persone hanno detto che un libro potrebbe essere una buona idea, qualcuno può suggerirne uno? Preferirei una lingua agnostica. Qualcuno sa che classe sarebbe coperto da questa materia in una laurea in Informatica? Sto cercando di google per alcune note e incarichi online gratuiti.

    
posta bplus 11.05.2011 - 22:50
fonte

7 risposte

3

Scrivi un server Web multi-thread. Imparerai un TON . E non solo sul threading.

    
risposta data 12.05.2011 - 21:44
fonte
4

Il problema produttore-consumatore è un classico esempio, e ti aiuta a capire non solo il threading, ma la programmazione del processore (può essere dimostrato usando fork () per i processi figli rispetto ai thread) e come i tuoi programmi interagiscono con il sistema operativo dietro le quinte.

Ecco una carrellata delle cose importanti che dovresti capire riguardo al threading / forking 1. Come il sistema operativo pianifica le attività (ad esempio l'algoritmo round robin) 2. Blocco delle risorse (se più thread stanno utilizzando la stessa risorsa, non vuoi che accedano loro allo stesso tempo - HAPPEN BAD THAP)

Ecco un articolo wiki su questo classico problema: link

Fondamentalmente, crea un "Produttore" che genera i thread di "Consumatori". Il produttore produce una "risorsa" e i consumatori la consumano. Mettilo in loop e guarda cosa succede (sarai sorpreso che alla fine i consumatori consumeranno più risorse che poi saranno disponibili a causa di metodi non sincronizzati).

    
risposta data 11.05.2011 - 23:01
fonte
2

Scegli uno dei classici problemi altamente paralleli. Potresti trovare più interessante sceglierne uno con velocità super-lineare.

Considera la ricerca attraverso un elenco non ordinato e non indicizzato. Questo problema è banalmente parallelo. Innanzitutto implementa una ricerca con thread singolo, quindi una ricerca parallela ingenua. Implementare il furto del lavoro. Genera alcuni set di dati casuali ed esegui tutte e tre le versioni sugli stessi set di dati. Calcola la velocità.

    
risposta data 11.05.2011 - 23:32
fonte
0

Non penso che un libro di testo sia il prossimo passo migliore. Un progetto è la strada da percorrere. Dovrebbe essere qualcosa di cui sei entusiasta.

La prima volta che ho eseguito il threading, stavo migliorando le prestazioni di un web crawler. È possibile eseguire la scansione molto più rapidamente se non si eseguono tutti gli I / O di rete in serie. Questo è un grande progetto per cominciare perché è possibile approcciarlo in diversi modi, ma non è così complicato come, ad esempio, la programmazione GUI multithread. Inoltre, non richiede molte competenze specialistiche (ad esempio, roba computazionale pesante).

Quindi, scopri alcune informazioni per analizzare e avviare l'hacking. Non dovrebbe richiedere molto tempo per ottenere qualcosa, sarà una presentazione gentile.

    
risposta data 11.05.2011 - 22:56
fonte
0

Modella una semplice app Spia contro Spia.

Ogni spy gira su un thread separato.

Ogni spia può infliggere danno sull'altra spia, ma non direttamente.

Ogni spia può rubare risorse preziose dall'altra spia, ma non direttamente.

Entrambe le spie dispongono di un pool limitato di risorse a loro disposizione e devono condividerle. Solo una spia può usare qualsiasi risorsa alla volta.

    
risposta data 11.05.2011 - 22:57
fonte
0

In cima alla mia testa: la quarta edizione di Bruce Eckel's Book "Pensare in Java" ha un capitolo molto lungo sul threading (> 100 pagine - quasi un piccolo libro in sé). Ho letto le edizioni precedenti del libro e quindi non ho letto questo capitolo; ma ricordo uno dei suoi post sul blog (o le note di rilascio del suo libro), in cui afferma che scrivere questo era molto difficile e alla fine è stato un vero successo per lui. Dai un'occhiata ...

A parte questo, c'è questo video corso di 2,5 ore su questo sito di formazione commerciale, ma puoi ottenere una prova gratuita (devi lasciare i dati della carta di credito, quindi non dimenticare di annullare l'iscrizione)

link

    
risposta data 11.05.2011 - 23:14
fonte
0

Should I go back to basics and maybe look at some computer science texts on the subject?

Questa è sempre una buona scelta e ti consiglierei di prendere un buon libro per familiarizzare con il threading. Ho imparato il multithreading in Java e la conoscenza è stata tradotta abbastanza facilmente in C #.

Se vuoi un esempio pratico, ti consiglio di provare problema del filosofo del cibo .

Devi imparare diverse cose quando stai entrando nel multithreading:

  1. I diversi modi di sincronizzare (semaforo, mutex, ecc.)
  2. Operazioni atomiche (in C # avviene tramite Interblocco per operazioni che non sono atomiche per impostazione predefinita).
  3. Programmazione concorrente senza blocco.
  4. Programmazione concorrente senza attesa.
  5. Thread, ThreadPools, BackgroundWorkers, ecc.

Non riesco a pensare ad altre cose al momento. Il tutorial di Albahari sembra davvero bello!

    
risposta data 11.05.2011 - 22:56
fonte

Leggi altre domande sui tag