J'ai quelques fichiers séparés, je veux traiter chaque ligne des fichiers (séquentiellement et indépendamment), et je veux que ce soit rapide.Meilleure façon de Multithreading pour traiter les lignes du nombre de fichiers
J'ai donc écrit un code pour lire un gros morceau d'un fichier dans un tampon sur RAM, puis les multi-threads vont rivaliser pour lire les lignes du tampon et les traiter. le pseudo-code est la suivante:
do{
do{
fread(buffer,500MB,1,file);
// creating threads
// let the threads compete to read from buffer and PROCESS independently
// end of threads
while(EOF not reached)
file = nextfile;
while(there is another file to read)
Ou celui-ci:
void mt_ReadAndProcess(){
lock();
fread(buffer,50MB,1,file);
if(EOF reached)
file = nextfile;
unlock();
process();
}
main(){
// create multi threads
// call mt_ReadAndProcess() with multi threads
}
Le processus est un processus coûteux (en temps opportun).
Y a-t-il une meilleure façon de faire cela? une meilleure façon de lire le fichier plus rapidement ou de le traiter avec plusieurs threads?
Merci à tous,
Ameer.
vous avez raison. il est préférable de laisser les fils se lire eux-mêmes. et dans mon deuxième exemple j'ai la même idée .. chaque thread va lire un bloc de fichier dans son propre tampon, dans ce cas, pourriez-vous me dire s'il y a un problème avec la vitesse? ou y a-t-il une meilleure idée? – ameerosein
* comme vous pouvez vérifier dans le post suivant, la lecture d'un gros bloc (ou morceau) d'un fichier à la fois en utilisant fread() est plus rapide que la lecture de ce morceau ligne par ligne! * Vraiment? Pensez-vous que vous serez capable d'écrire du code aussi rapide et aussi fiable que les développeurs qui ont écrit vos bibliothèques de systèmes d'exploitation? Vous pensez vraiment que vous pouvez écrire du code meilleur et plus rapide pour diviser un fichier texte en lignes séparées? Savez-vous comment 'fread()' lit réellement les données? Comment un appel à 'fread()' se traduit par un ou plusieurs appels système 'read()'? –
afin que vous puissiez écrire un code simple pour le tester, lire un fichier entier à la fois, puis le lire ligne par ligne !! – ameerosein