giovedì 16 giugno 2011

. NET spiegando barriera di classe

. NET spiegando barriera di classe

Con la maggiore attenzione sistemi multi-core la comprensione della programmazione parallela e concorrente è più importante che mai. Per fortuna. NET 4 ha fatto un sacco di progressi nei tipi di primitive di sincronizzazione a disposizione degli sviluppatori. Una primitiva sia la barriera che Emad Omara utilizza per implementare una sorta parallelo unione.

Emad Omara è parallela fondere algoritmo di ordinamento presume che si avrà pieno accesso alle CPU della macchina, per la durata della operazione di ordinamento. Anche se questo non sia necessariamente vero, ha lo scopo della manifestazione. L'array di input viene prima diviso in partizioni di N dimensioni pressoché uguali, dove N è il numero della CPU logiche. Un thread viene avviato per ciascuna CPU di eseguire una single-threaded sorta all'interno di una propria partizione.

A questo punto i fili devono essere sincronizzati prima di continuare con la prossima fase. La metà dei filetti esisterà mentre l'altra metà si esibiranno fondere i tipi attraverso le partizioni adiacenti. Nelle precedenti versioni di. NET questo sarebbe stato fatto con bassa livello primitive o l'uso attento delle Thread.Join. La classe Barriera fornisce un'altra opzione.

La classe di barriera è un po 'come Thread.Join, nel senso che attende tutti i thread per completare. Ma a differenza che i fili si aspettavano, non c'è bisogno di uscire.Invece hanno semplicemente bisogno di segnalare di aver completato l'attuale fase e si è pronti per iniziare quella successiva. Questo elimina la necessità di ripartizione e ricreare le discussioni, il che è particolarmente importante quando si lavora con pool di thread.

Per impostazione predefinita la classe Barriera presuppone che ogni thread ha bisogno di segnali che sia completo prima di una qualsiasi delle discussioni passare alla fase successiva. Chiaramente questo non funzionerà qui perché ogni passaggio nella merge sort ha bisogno la metà di molti fili. Così invece Emad chiama il metodo Barrier.RemoveParticipant, il che riduce il numero atteso di thread di segnalazione per uno.

Anche in questo caso va notato che questo algoritmo è stato concepito come strumento didattico e raffinatezza è necessario un ulteriore può essere usato in un ambiente di produzione.

Nessun commento:

Posta un commento