Qual è il modo più veloce per passare grandi dati tra JVM?

7

Ho 2 JVM sulla stessa macchina che voglio passare circa 1Mb di dati (serializzabili) tra idealmente in meno di 5 ms.

Sotto carico, l'utilizzo di HTTP su localhost richiede circa 70 ms di media.

Ho provato il nocciolò, passando i dati tramite una coda distribuita - media di circa 50ms.

C'è un modo più veloce?

Sto usando l'avvio a molla.

    
posta Bohemian 06.01.2017 - 22:48
fonte

2 risposte

4

Perché non usi le prese pure?

Un socket sulla stessa macchina invierà i dati piuttosto rapidamente. Supponendo di poter inviare 100 MB \ s, dovresti riuscire a inviare 1 MB in circa 10 ms. Ottenere velocità più alte di questa sarà un po ' difficile. Se disponevi di una buona scheda, potresti portarla a meno di 5 ms.

Se è possibile serializzare i dati, è possibile inviarli abbastanza facilmente. Vedi questo per l'invio di oggetti su socket.

L'uso dei file ti dà una media di circa 80-160 MB / se 12 ms - 6,25 ms per inviare 1 MB, ma dovresti leggerlo di nuovo che richiederà più tempo.

Potresti usare un file mappato in memoria per leggere solo il file una volta e averlo memorizzato in memoria in modo che qualsiasi macchina virtuale possa leggerlo dalla memoria. Mantenere un file in memoria con un MappedByteBuffer fornirà un accesso efficiente ma tu Dovresti prima leggere il file. Questo è anche un po 'più complicato dell'invio su socket o della scrittura / lettura da un file.

    
risposta data 07.01.2017 - 00:16
fonte
-1

Prova ad usare un file mappato in memoria, usando le classi NIO.

    
risposta data 06.01.2017 - 23:03
fonte

Leggi altre domande sui tag