J'ai un énorme fichier texte séparé par ligne et je veux faire des calculs sur chaque ligne. J'ai besoin de faire un programme multithread pour le traiter car c'est le traitement de chaque ligne qui prend le plus de temps à réaliser plutôt que la lecture de chaque ligne. (le goulot d'étranglement se situe au niveau du traitement par le CPU, plutôt qu'au niveau des E/S)
Il y a deux options que j'ai trouvées :
1) Ouvrir le fichier à partir du thread principal, créer un verrou sur l'identifiant du fichier et transmettre l'identifiant du fichier aux threads des travailleurs, puis laisser chaque travailleur accéder directement au fichier en lecture.
2) Créer une configuration producteur/consommateur où seul le thread principal a un accès direct en lecture au fichier, et alimente les lignes à chaque thread de travail en utilisant une file d'attente partagée.
Ce qu'il faut savoir :
- Je suis vraiment intéressé par les performances de vitesse pour cette tâche.
- Chaque ligne est indépendante
- Je travaille en C++ mais je pense que le problème est un peu indépendant du langage.
Quelle option choisiriez-vous et pourquoi ?