2010-08-18 25 views
5

Esiste una pletora di paradigmi e metodi per la programmazione simultanea in uso oggi. Memoria transazionale del software, attori, concomitanza di stati condivisi, spazi di tupla e molti altri ancora.Problemi di esempio per il calcolo simultaneo

Ciò che trovo carente, tuttavia, è una libreria di problemi di test interessanti per la concorrenza. Un esempio ben noto è il "Dining Philosophers Problem", che non è né abbastanza complesso né motivante né realistico. Poi ci sono molti algoritmi paralleli (moltiplicazione della matrice, rendering, parallelismo dei dati nidificati generali) che richiedono solo la distribuzione del lavoro, ma nessuna concomitanza reale con la comunicazione tra i thread di esecuzione.

Quindi, qualcuno può indicarmi alcune serie interessanti di problemi che richiedono una concomitanza reale in un ambiente interattivo, forse anche distribuito, che siano abbastanza semplici da usare come esempi per i paradigmi della concorrenza? Idealmente, voglio trovare una serie di problemi che servano da "prova di mancanza" per i paradigmi della concorrenza (o per evidenziare le loro differenze, poiché ogni paradigma ha i suoi punti di forza e di debolezza).

Ogni aiuto è molto apprezzato :)

risposta

3

Ho già considerato questo problema esatto, avendo già proposto qualche programmazione concorrente me paradigmi: p

La conclusione ho raggiunto è quindi che un tale insieme di test doesn Sembra davvero esistere in un modo indipendente dalla lingua. Anche se potrebbe essere utile per la sua esistenza, sembra che ci siano alcune buone ragioni per cui non lo fa (per quanto ne so io).

La maggior parte del fuoco all'interno programmazione concorrente tende ad essere su dati parallelismo, in modo tale che la stessa operazione viene applicato in parallelo a diversi pezzi dello stesso insieme di dati. I tipi di parallelismo a livello di attività (cioè attività diverse eseguite in parallelo, possibilmente condividendo dati) di cui penso tu stia parlando non sono in realtà molto praticati. Penso che sia perché è piuttosto difficile. Ma penso che sia anche piuttosto difficile perché la maggior parte dei problemi non si prestano particolarmente bene a questo tipo di concorrenza. Descrivere un sistema distribuito in termini di primitive di concorrenza può essere utile, ma questi sistemi tendono a essere disaccoppiati in modo tale che esiste un protocollo (scritto o implicito) che modifica la loro comunicazione. Le persone tendono a non pensare a questi tipi di sistemi come a situazioni di programmazione "concomitanti", anche se sono visualizzate nel giusto frame (cioè considerando il "client" e il "server" come agenti che operano in parallelo con la sincronizzazione in alcuni punti) .

Gli unici posti in cui penso che potresti trovare alcune fonti di ispirazione sarebbero all'interno delle implementazioni individuali. Erlang, Occam (e Occam-pi), Alice, CML, Haskell concomitante ecc. Tutti hanno probabilmente piccoli corpus di test, ma entrambi i problemi e le loro implementazioni saranno distorti per essere implementabili all'interno di un linguaggio specifico (perché ovviamente sono implementabile in quella lingua!). Forse potresti anche guardare alle community che lavorano su multi-party session types e varie process calculi come pi-calculus, CCS e CSP per vedere quali tipi di sistemi stanno usando come modelli di esempio. L'idea di un insieme indipendente di problemi linguistici standard per la descrizione dei sistemi che comunicano simultaneamente è comunicativo, ma alquanto inafferrabile a questo punto, penso.

+0

Inoltre, se vi capita di avere qualche interesse nel tentare di compilare un tale corpus di problemi di test, fatemelo sapere. Potrei essere interessato ad aiutare. Ci sono i dettagli di contatto disponibili dal sito web collegato nel mio profilo. – Gian

Problemi correlati