IPC linux enorme transazione

2

Sto costruendo e applicazione che richiede enormi transazioni / sec di dati e ho bisogno di usare IPC per la comunicazione mutloccata mutito, so che ci sono molti metodi da usare ma non sono sicuro quale scegliere per questa applicazione.

Questo è ciò che l'applicazione avrà, 4 processi, ogni processo ha 4 thread, il blocco dati che deve essere trasferito tra due o più thread è di circa 400 KB. Ho trovato che fifo è una buona scelta, tranne che è 64 KB, che non è così grande, quindi ho bisogno di modificare e ricompilare il kernel, ma non sono sicuro se questa sia la cosa giusta da fare? Ad ogni modo, sono aperto a qualsiasi suggerimento e mi piacerebbe spremere la tua esperienza in questo :) e lo apprezzo in anticipo.

    
posta poly 08.07.2012 - 18:07
fonte

2 risposte

2

Io programma in modo manine per Windows ma penso che le soluzioni siano le stesse per Linux. Vorrei utilizzare uno dei seguenti:

  • Named Pipes: veloce, con build nel paradigma del client server, funziona bene con più thread, ad es. più lettori / autore singolo ecc.
  • Memoria condivisa: probabilmente il metodo più veloce di IPC, ma è necessario eseguire la sincronizzazione, il blocco delle risorse ecc.
  • Socket: uguali ai pipe, un po 'più lenti, ma in grado di comunicare su computer o internet.

Vorrei andare per Named Pipes. Li uso molto e sono veloci e affidabili. Inoltre, se hai bisogno di spostare tanti dati al secondo (non so esattamente quanto), forse hai bisogno di ripensare il tuo approccio. Gli estremi spesso mostrano cattive scelte di design.

EDIT:

Per le pipe dei nomi ecco un esempio .

    
risposta data 08.07.2012 - 18:34
fonte
1

Se stai passando grandi quantità di memoria, hai assolutamente bisogno di memoria condivisa. Nel momento in cui copi quel buffer da 400k stai subendo un grande successo.

Quindi se assegni i buffer in un'area di memoria condivisa, puoi semplicemente passare il riferimento / pointer / handle / qualunque cosa intorno e sei bravo. Dovrai stare attento a scrivere simultaneamente su questi buffer, ma è ancora molto più veloce che passare una copia in giro. È abbastanza facile da fare anche se si mantiene un blocco "in uso" all'inizio del buffer.

Su Linux, shmget è il punto di partenza.

    
risposta data 09.07.2012 - 01:07
fonte

Leggi altre domande sui tag