Domanda

C'è una pletora di paradigmi e metodi per la programmazione in uso concomitante di oggi. Software di memoria, attori, concorrenza stato condiviso, spazi tuple transazionali e molti, molti altri.

Quello che trovo manca, tuttavia, è una libreria di problemi test interessanti per la concorrenza. Un esempio ben noto è il "Dining Filosofi problema", che non è né un sufficiente complesso né motivare né realistico. Poi ci sono molti algoritmi paralleli (moltiplicazione matriciale, rendering, generale dati nidificata parallelismo) che solo richiedono una distribuzione del lavoro, ma nessuna vera concorrenza con la comunicazione tra thread di esecuzione.

Quindi, qualcuno mi può puntare a qualche serie interessanti di problemi che richiedono vera concorrenza in un ambiente interattivo, forse anche distribuito, che sono abbastanza semplici da usare come esempi per paradigmi di concorrenza? Idealmente, vorrei trovare una serie di problemi per servire come un "lackmus-test" per i paradigmi di concorrenza (o per evidenziare le loro differenze, come ogni paradigma ha i suoi punti di forza e di debolezza).

Ogni aiuto è molto apprezzato:)

È stato utile?

Soluzione

Ho già considerato questo problema esatto, avendo già proposto alcuni paradigmi di programmazione simultanei me: p

La conclusione ho raggiunto è quindi che un tale insieme di test non sembra esistere davvero in maniera indipendente dalla lingua. Mentre potrebbe essere utile per poter esistere, sembra che ci siano alcune ragionevolmente buone ragioni che non si (al meglio delle mie conoscenze).

La maggior parte del fuoco all'interno programmazione concorrente tende ad essere 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è compiti diversi in corso di esecuzione in parallelo, eventualmente, la condivisione dei dati) che penso tu stia parlando non è in realtà fatto molto. Penso che questo sia perché è abbastanza difficile. Ma penso che sia anche un po 'difficile perché la maggior parte dei problemi non si prestano particolarmente bene a questo tipo di concorrenza. Descrivendo un sistema distribuito in termini di primitive di concorrenza può essere utile, ma questi sistemi tendono ad essere disaccoppiato tale che vi sia un protocollo (scritto o implicita) moderare la loro comunicazione. Le persone tendono a non pensare a questi tipi di sistemi come ovviamente "concurrent" programmazione situazioni, anche se sono più se considerati in struttura (ossia considerando il "client" e "server" come agenti operanti in parallelo con la sincronizzazione in alcuni punti) .

Gli unici luoghi Penso che si potrebbe trovare alcune fonti di ispirazione sarebbe all'interno delle singole implementazioni. Erlang, Occam (e Occam-pi), Alice, CML, Concurrent Haskell ecc tutti possono avere piccoli corpus di test, ma sia i problemi e le loro implementazioni stanno per essere sbilanciata verso essendo implementabile all'interno di una lingua specifica (perché ovviamente sono implementabile all'interno di quella lingua!). Forse si potrebbe anche guardare alle comunità che lavorano su tipi di sessione multi-partito , e vari calcoli di processi come pi-calcolo, CCS e CSP per vedere quali tipi di sistemi che utilizzano come esempi di modelli. L'idea di un insieme indipendente dal linguaggio standard per la descrizione di problemi concomitanti comunicare sistemi è attraente, ma un po 'sfuggente, a questo punto, penso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top