Quel est un moyen efficace pour une application multithread Java où plusieurs threads doivent lire exactement le même fichier (> 1 Go en taille) et l'exposer comme un flux d'entrée? J'ai remarqué que s'il y a beaucoup de threads (> 32), le système commence à se disputer sur les E/S et a beaucoup d'E/S attendues.Java multithreading la lecture d'un seul fichier
J'ai envisagé de charger le fichier dans un tableau d'octets partagé par tous les threads - chaque thread créerait un ByteArrayInputStream, mais l'allocation d'un tableau d'octets de 1 Go ne fonctionnerait pas correctement.
J'ai également envisagé d'utiliser un seul FileChannel et chaque thread créant un InputStream par-dessus en utilisant Channels.newInputStream(), mais il semble que c'est le FileChannel qui maintient l'état pour InputStream.
Chaque thread a-t-il besoin de tout le contenu du fichier? Ou chacun peut-il rechercher les données pertinentes dont il a besoin? –
Chaque thread doit lire le fichier entier. – bob
Le système a 8 Go de mémoire, et cela ne me dérangerait pas d'allouer un tableau de 1 Go. Mais la JVM ne semble pas aimer cela - elle utilise 100% de CPU essayant d'allouer le tableau pendant très longtemps. – bob