Condivisione dei dati inter-processo e inter-thread [chiusa]

2

So che i sistemi operativi facilitano la condivisione dei dati tra processi e inter-thread. Voglio conoscere i meccanismi utilizzati per facilitare tale condivisione. Ho letto di "pipe". Quali sono gli altri modi?

    
posta John Smith 07.11.2012 - 15:58
fonte

3 risposte

1

I thread operano nello spazio di indirizzamento comune, quindi le strutture di dati in memoria possono essere condivise senza restrizioni (presupponendo, naturalmente, che sia stata implementata una sincronizzazione corretta). Si può passare un indirizzo di una struttura di dati in memoria a un altro thread in modo che il thread possa accedere a quella struttura di dati.

I processi, d'altra parte, operano in spazi di memoria separati, quindi usano uno dei diversi approcci:

  • Scambio di dati serializzati : può essere implementato su pipe o altri protocolli di dati di scambio in memoria (ad esempio collegando via TCP a un server in esecuzione su localhost ). I dati devono essere serializzati e deserializzati, rendendo questo approccio meno pratico al crescere del volume di dati. Nota che non è esattamente condivisione , perché tutti i dati sono copiati in entrambe le direzioni.
  • Memoria condivisa : consente di scambiare grandi quantità di dati senza serializzazione. Questa è una vera condivisione dei dati, perché non viene eseguita alcuna copia. Tuttavia, garantire la corretta sincronizzazione diventa una responsabilità della tua applicazione. I file mappati in memoria sono un'altra variante della memoria condivisa, mantenendo tutti i vantaggi e gli svantaggi dell'approccio.
risposta data 07.11.2012 - 16:12
fonte
1

Coda messaggi è un'altra opzione. Un processo può scrivere sulla coda di una coda e un altro processo può leggere dalla testa di quella coda. Il vantaggio della coda dei messaggi è che supporta operazioni asincrone.

    
risposta data 07.11.2012 - 17:05
fonte
0

A seconda dell'ambito e del tipo di un'applicazione, se le applicazioni di riga di comando sono necessarie, è possibile utilizzare le pipe scrivendo e leggendo dalla console, se si sta scrivendo un'applicazione intranet o un'applicazione autonoma e i processi di accesso ai dati sono paralleli o attivi macchine diverse è possibile utilizzare un server di database.

Se ciò di cui hai bisogno non è complesso, puoi usare file o sistemi di database che sono parte integrante dell'applicazione come SQL lite , ma qui è necessario implementare la funzione di segnalazione in modo da non danneggiare i dati se entrambi i processi tentano di scrivere dati.

    
risposta data 07.11.2012 - 16:18
fonte

Leggi altre domande sui tag