Correggetemi se ho torto, ma sono sorpreso che questo non sia stato chiesto prima qui ...Qual è la differenza tra il modello di trasmissione di messaggi e di memoria condivisa?
risposta
È una differenza piuttosto semplice. In un modello di memoria condivisa, più lavoratori operano tutti sugli stessi dati. Ciò apre molti dei problemi di concorrenza che sono comuni nella programmazione parallela.
sistemi di message passing fanno lavoratori comunicano attraverso un sistema di messaggistica. I messaggi mantengono tutti separati, in modo che i lavoratori non possano modificare i reciproci dati.
Per analogia, consente di dire che stiamo lavorando con un team su un progetto insieme. In un modello, siamo tutti affollati attorno a un tavolo, con tutti i nostri documenti e dati disposti. Possiamo solo comunicare cambiando le cose sul tavolo. Dobbiamo stare attenti a non tentare tutti di operare sullo stesso pezzo di dati contemporaneamente, altrimenti si confonderà e le cose si confonderanno.
In un modello di messaggio che passa, siamo tutti seduti ai nostri sportelli, con il nostro set di carte. Quando vogliamo, possiamo passare un foglio a qualcun altro come "messaggio" e quell'operaio ora può fare ciò che vuole con esso. Abbiamo sempre e solo accesso a tutto ciò che abbiamo di fronte a noi, quindi non dobbiamo mai preoccuparci che qualcuno possa raggiungere e modificare uno dei numeri mentre siamo nel mezzo per riassumerli.
Ok, sciocco analogia!
I modelli di passaggio di messaggi (ad esempio Erlang) non hanno nessuno stato condiviso; tutte le sincronizzazioni e le comunicazioni avvengono scambiando messaggi. I modelli di memoria condivisa comunicano leggendo/scrivendo su blocchi di memoria condivisi, che sono protetti da semafori o simili.
il throughput del sistema di message passing può essere troppo bassa per alcune applicazioni che richiedono tempo le risposte veloci, ma se avete bisogno di velocità o di elaborazione in tempo reale, quindi è possibile utilizzare un sistema di memoria condivisa.
messaggio che passa sono buon metodo per giustificare i dati, ma ha il tempo di risposta lento per communication.But più veloce nella memoria condivisa dati del modello vengono estratti da una memoria e di un gruppo di lavoro in grado di fare un lavoro diverso nel corso stessi dati
Questa risposta è quasi la stessa di quella di Juned Ahmed. Hai qualcosa da aggiungere? – Artemix
- Nel modello di memoria condivisa, la memoria è condivisa da processi cooperanti, che possono scambiare informazioni leggendo e scrivendo dati, ma nella comunicazione di passaggio dei messaggi avviene tramite messaggi scambiati tra i processi cooperanti.
- La memoria condivisa consente di eseguire i processi contemporaneamente ma il messaggio che passa non può.
- La funzione di passaggio dei messaggi ha due operazioni: inviare (messaggio) e ricevere (messaggio). Il processo di cui ha dimensione fissa o variabile.
- Il passaggio di messaggi è utile per lo scambio di piccole quantità di dati, poiché non è necessario evitare conflitti. Il passaggio dei messaggi è anche più facile da implementare rispetto alla memoria condivisa per la comunicazione tra processi.
- Nei sistemi a memoria condivisa, chiamate di sistema sono richiesti solo per stabilire regioni a memoria condivisa. Una volta stabilita la memoria condivisa, tutti gli accessi sono trattati come accessi di memoria di routine e non è richiesta alcuna assistenza dal kernel.
veloce
Memoria condivisa consente la massima velocità e la convenienza della comunicazione, in quanto può essere fatto a velocità di memoria quando all'interno di un computer.La memoria condivisa è più veloce di passaggio di messaggi, come i sistemi di message-passing sono tipicamente implementate utilizzando le chiamate di sistema e richiedono più tempo a cercare di intervento del kernel così.
sul punto 2), io credo che la concorrenza può essere realizzato in un modello di message-passing, trasmettendo i messaggi agli altri lavoratori che possono iniziare a lavorare contemporaneamente. Chiaramente ha bisogno di altri metodi di orchestrazione per unire l'output. Sono d'accordo che questo potrebbe essere più veloce su un modello di memoria condivisa, ma il modello che trasmette messaggi supporta l'esecuzione simultanea del processo –
Ora, non possiamo dire che la memoria condivisa sia più veloce del messaggio che passa a causa delle chiamate di sistema. Dal libro sui concetti del sistema operativo (Abraham Silberschatz) "Recenti ricerche su sistemi con più core di elaborazione indicano che il passaggio dei messaggi offre prestazioni migliori rispetto alla memoria condivisa su tali sistemi. La memoria condivisa soffre di problemi di coerenza della cache, che sorgono perché i dati condivisi migrano tra i vari cache. Poiché il numero di core di elaborazione su sistemi aumenta, è possibile che vedremo il messaggio passare come il meccanismo preferito per IPC. :) –
Anche se si sta chiedendo per i differenze tra modello di message-passing e modello di memoria condivisa e hanno già avuto buone risposte di circa circa le loro prestazioni, modalità di scambio di informazioni, e problemi di concorrenza, vorrei far notare che:
non ci può essere nessun differenze fondamentali tra loro per quanto riguarda la loro computabilità (a certe condizioni).
È possibile simulare una memoria condivisa sul sistema di trasmissione messaggi sottostante. In questo modo è possibile visualizzare il modello di memoria condivisa come un linguaggio di alto livello per la progettazione di algoritmi in sistemi di message-passing distribuiti asincroni.
In particolare, questo documento [email protected]'95 mostra che
qualsiasi algoritmo senza attendere sulla base atomica, single-scrittore (e multi-sceneggiatore) registri multi-lettore possono essere emulate automaticamente in sistemi di message-passing, a condizione che almeno la maggioranza dei processori non sia difettosa e rimanga connessa. Il sovraccarico introdotto da queste emulazioni è polinomiale nel numero di processori nel sistema.
sciocco analogia, ma uno per la creatività. :) –
@SashaChedygov Sarebbe uno di voi o Chris cura di spiegare perché questo è un'analogia stupido? – Donbhupi
@Donbhupi Volevo solo dire che è stupido perché non è uno scenario del mondo reale realistico. Funziona molto bene come un'analogia e si adatta bene ai concetti, ha appena creato un'immagine divertente nella mia testa. È tutto. :) –