mercoledì 22 giugno 2011

Joe Duffy sul futuro della concorrenza e parallelismo

DI Jonathan Allen

Joe Duffy è un architetto di piombo su un progetto di incubazione sistema operativo di Microsoft, ed è stato l'architetto di Parallel Extensions per. NET. E 'anche autore di programmazione concorrente su Windows .

Relativi fornitori dei contenuti

Scaling Continuous Integration Per grandi gruppi e distribuiti
Perché NoSQL? Un manuale in aumento di NoSQL
Stand up di bug con smartassembly. Consentire agli utenti di inviare segnalazioni di errori con un solo clic. Per saperne di più.
Hai incendi in produzione? Trova causa principale in pochi minuti. GRATIS Java prestazioni dell'utensile
Lavoratore funzionalità leva per un'architettura di partecipazione
La ragione per cui abbiamo voluto parlare con te è che la ricerca in concorrenza e parallelismo sembra aver preso una piega. Per gran parte dell'ultimo mezzo decennio o giù di lì vi è stato un grande interesse nella programmazione funzionale, da solo o in combinazione con software di memoria transazionali. La messa a fuoco sembrava essere sul tentativo di raggiungere la sicurezza dimostrabili filo attraverso l'eliminazione o almeno a contenere gli effetti collaterali.

Ma più di recente vi è stato un gran parlare di linguaggi e le librerie che cercano di risolvere i problemi in altri modi, più o meno ignorando il problema degli effetti collaterali. Quelli che vengono in mente sono:

D 2.0: Questo linguaggio predefinito oggetti che contengono all'interno di un singolo thread, anche andando al punto di conservare globali nella memoria locale del thread. Se volete qualcosa di passare da un thread a un altro devi fare è immutabile o comunque indicano che in realtà è thread-safe.
. NET 5: VB e C # sono entrambi alterando il linguaggio per supportare la programmazione asincrona quasi come alternativa al multi-threading.
Grand Central Dispatch, TPL flusso di dati, e diverse altre biblioteche sono pesantemente investito in scambio di messaggi come strumento di comunicazione cross-thread.
InfoQ: Siamo davvero vedere un grande cambiamento nel modo in applicazioni multi-threaded stanno per essere scritti o sono questi miglioramenti solo di ciò che abbiamo fatto tutti insieme?

Joe Duffy: Io in realtà sono due risposte.

La mia prima risposta è che, secondo gli ultimi decenni di ricerca, no, questo non è un grande cambiamento al modo in programmi paralleli sono state progettate.

Il modello di attore, introdotto quasi 40 anni fa, era veramente rivoluzionario, e fatto 1 ° classe l'idea che gli agenti avrebbero contemporaneamente orchestrare qualche compito più interessanti attraverso scambio di messaggi. Questa idea generale è emerso più volte nel corso degli anni, accumulando utili estensioni e varianti nel tempo. Hoare CSP, Liskov Argus, Occam, Ada, MPI, Erlang e, più recentemente, linguaggi come Scala, Clojure, e Go. Architetture specializzate sono stati addirittura costruiti, come The Connection Machine, che utilizzano message passing per compiere altamente scalabile a grana fine parallelismo.

Nel mio libro, per esempio, vi consiglio di architetto a tutti i loro programmi concorrenti, come un mare asincrono di isole per lo più isolati del codice che comunicano attraverso il message passing, e internamente utilizzare condiviso Stato attraverso compito e il parallelismo dei dati.

La mia seconda risposta è diversa. Direi che, sì, questo è un importante cambiamento per la maggior parte della comunità di sviluppo, in quanto ambienti di programmazione mainstream stanno adottando le idee che abbiamo visto nella ricerca e linguaggi sperimentali nel corso degli anni.

Mi aspetto che C #, C + + e Java, per esempio, avrà Attore offerte basate entro i prossimi 5 anni. Nel frattempo, gli sviluppatori su piattaforme tali sperimentare nuovi linguaggi, e continuare a costruire architetture sempre più in questo stile, senza supporto di prima classe nel loro ambiente primario. Gli sviluppatori hanno fatto questo per anni, attraverso una combinazione di fili - ora i compiti - e, andando ancora più indietro, con COM, EJB, e servizi web.

Infatti, una classe molto specializzato di programmatori su questo pianeta - gli sviluppatori di calcolo tecnico di HPC, la scienza, e di Wall Street - sono già abituati a fare questo con toolkit specializzate, come MPI.

Il cambiamento più importante che abbiamo di fronte è che le lingue principali inizierà a incorporare più concorrenza, sicurezza - immutabilità e l'isolamento - e le librerie della piattaforma e le architetture meglio sostenere questo stile di decomposizione del software. Gli sviluppatori OOP sono abituati a loro programma di partizionamento in classi e oggetti, ora dovranno abituarsi a loro programma di partizionamento in attori asincrono che possono essere eseguiti contemporaneamente. All'interno di questo mare di asincronia getterà ordinaria codice imperativo, spesso potenziata con grana fine compito e il parallelismo dei dati.

InfoQ: E pensate che questi sono passi lungo il sentiero a destra o dovremmo guardare altrove?

Joe Duffy: Sì, assolutamente, questa è la strada giusta da seguire, a mio parere.

E 'importante non cadere nella trappola di credere in una pallottola d'argento sola, comunque. Scambio di messaggi non è una panacea, spesso il percorso migliore per la scalabilità è parallelismo dei dati. Programmazione funzionale e immutabilità non è una panacea, se si sta sostituendo gli algoritmi C e la necessità di competere performance-saggio, è molto bene potrebbe essere necessario utilizzare una di quelle familiari e strutture dati efficienti mutevole dal vostro libro preferito algoritmi. Non buttare via decenni 'vale la pena di ricerca, anche se avremo bisogno di evolvere la parte destra dei nostri programmi nel modo giusto.

Un'altra cosa importante da capire è che ci sia stato condiviso nei modelli di scambio di messaggi. Questo è un piccolo segreto. E 'emergente e nasce attraverso la comunicazione di un gruppo di attori stateful. Proprio come a grana fine invarianti possono essere suddivisi e testimoniato da interleavings concorrenti, in modo da possono questi più emergente a grana grossa invarianti essere rotto e testimoniato. Concorrenza significa indeterminismo, non importa come la tagli. C'era un interessante articolo lo scorso anno a ICFP sulla ricerca di "gare in grande" in Erlang, un linguaggio di pura passando messaggio di programmazione. Molte delle preoccupazioni sincronizzazione stessa e le tecniche utilizzate nei programmi di memoria condivisa sorgere a un livello superiore di astrazione nei programmi di message passing, questo tende a renderli più facili da capire e ragionare su, però è solo una serie di compromessi, davvero.

InfoQ: Pensi che linguaggi quali C #, C + + e Java in grado di offrire un modello basato attore solo con le biblioteche? Oppure, per farlo bene ci sarebbe bisogno di vedere un qualche tipo di cambiamenti sintattici per le lingue?

Joe Duffy: E 'certamente possibile che queste piattaforme possono immergere i piedi nel lago in primo luogo cercando una libreria approccio solo. Questo è un ottimo modo per sperimentare.

Per fare prima classe attori per lo sviluppatore, tuttavia, è probabile che i progettisti linguaggio finalmente esplorare il supporto della lingua. Ci sono due sfide principali che credo li guida in questa direzione:

Sintassi . Come abbiamo visto con, diciamo, TPL e C # 's nuovo attendono parola chiave, niente può battere l'espressività di un costrutto del linguaggio. Tutte le lingue grande attore in passato li hanno resi di prima classe.
Sicurezza . Per avere un vero e proprio modello di classe mondiale Attori, avete bisogno di sicurezza. Questo significa isolamento e immutabilità. Ovviamente, nessuna delle suddette lingue sono queste nozioni oggi, è plausibile Attori non sicuro potrebbe essere offerto, ma questo è meno ideale.
In un certo senso, vediamo già la sperimentazione con biblioteca-solo un approccio. Microsoft CCR e TPL tecnologie flusso di dati, ad esempio, finì sulla strada libreria per message passing, né con il supporto sintattico né la sicurezza. Ma i risultati sono meccanismi più imperativo che di più alto livello modelli di programmazione. Questo va bene e funziona bene per loro, ma certamente beneficiare di supporto per la lingua costruito in cima. Non c'è dubbio che deve essere il futuro della piattaforma, se questo stile di architettura e programmazione è quello di diventare onnipresente.

InfoQ: Già nel luglio dello scorso anno lei ha scritto un articolo con la linea "prima di isolamento, in secondo luogo immutabilità; ultima sincronizzazione". Vede la necessità di ulteriori ricerche in costrutti del linguaggio che imporrebbe l'isolamento o immutabilità?

Joe Duffy: Assolutamente! Dobbiamo fare qualcosa di reale concorrenza che gli esseri umani possono introdurre nei loro programmi con un alto grado di fiducia, eliminando le razze, le discussioni, e serrature, e ottenere in fase di compilazione di sicurezza del gioco è l'unica strada in avanti.

Ci sono alcune analogie con il tipo di sicurezza. Scriviamo C # e Java codice senza doversi preoccupare del sistema di tipi fori. Un'intera classe di errori di programma viene eliminato da-costruzione, ma è bello. Lo stesso deve accadere per la concorrenza di sicurezza. Ma certo non sarà facile adattamento questi concetti in lingue esistenti come C #, C + + e Java.

C'è un grande sforzo di ricerca già mostrando quello che potrebbe essere possibile in questo campo, più la comunità Java che in C # o C + +. Ma le idee trasferimento abbastanza facilmente, e, naturalmente, linguaggi imperativi continueremo a imparare lezioni importanti da quelle funzionali.

InfoQ: Tra la roba che esce di Java, in particolare quelli che pensi vale la pena guardare?

Joe Duffy: In generale, Java è stato un passo o due prima di C # e C + + quando si tratta di concorrenza negli ultimi dieci anni. Questo include la "vecchia era" di concorrenza, che include lavoro di back Doug Lea in Java 1.4, e l'intero modello di memoria Java JSR133 sforzo. Più di recente, c'è stata una grande quantità di buon lavoro in immutabilità e controllare gli effetti collaterali. Il lavoro che sto più entusiasta è deterministico Parallel Java (DPJ) che usciva dalla University of Illinois. Se si guarda al passato conferenze lingua dozzina di grandi, ad esempio PLDI e POPL, oltre ai rispettivi workshop, vedrete molte altre idee fresche e innovative sviluppando nel contempo l'un l'altro. Non è chiaro quanto di questa ricerca lo farà in Java corretta, comunque come un incubatore di idee è stato grande.

E 'anche bello vedere che, come. NET ha visto con il CLR nel corso degli anni, la JVM è ora un vero multi-lingua piattaforma. Sia Clojure e Scala ha iniziato prendendo di mira la JVM, e poi subito aggiunto per il supporto anche in esecuzione sul CLR. Come i tempi di esecuzione diventano sempre più parallelo, le lingue sopra di loro stanno trovando più incentivi per esporre tali capacità in modo sicuro. Heck, anche JavaScript è stato dato il attendono parola chiave di Google estensioni Traceur nuovo a JavaScript. Ora tutti abbiamo bisogno sono i browser forniti con la concorrenza interna di prima classe e noi abbiamo ancora un altro multi-Language Runtime parallelo.

InfoQ: Se posso girare da linguaggi e librerie di strumenti per un momento, quali sono i tuoi pensieri su bug valuta individuare strumenti come gli scacchi e Cuzz?

Joe Duffy: Da una parte, io li amo. Qualsiasi strumento pragmatico che aiuta a trovare gli errori di concorrenza oscuro e costosi è una cosa meravigliosa. Questi sono alcuni dei bug più doloroso di prova: prima di questi strumenti è diventato ampiamente utilizzabile, i team di Microsoft regolarmente trascorso mesi su mesi facendo a lungo raggio stress su hardware esotici, e anche allora non li ha trovati tutti. E sono sicuramente alcuni dei bug più dolorose e costose da trovare in natura troppo: ci sono alcuni esempi molto famosi di errori di concorrenza costosi mancati durante i test, come la condizione di competizione che ha causato il blackout Nord-Est del 2003.

D'altra parte, che questi strumenti devono esistere è un sintomo del problema più ampio: le nostre lingue non sono sicuri e non fanno nulla per aiutarci scrivere programmi concorrenza corretta-costruzione. Per ogni bug scoperto da uno strumento come questo, ci sono altri cinquanta estremamente sottili interazioni multi-threaded che un programmatore ha dovuto passare ore nel modo giusto. (E probabilmente alcuni che lo strumento di perdere, dato lo spazio di ricerca di esplosivo necessari per permutare i interleavings.) Basti pensare per un attimo tutto ciò che la produttività sprecato!

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.