Supposons que je veuille trouver toutes les correspondances dans un fichier texte compressé:
$ gzcat file.txt.gz | pv --rate -i 5 | grep some-pattern
pv --rateutilisé ici pour mesurer le débit des tuyaux. Sur ma machine, c'est environ 420Mb / s (après décompression).
Maintenant j'essaye de faire du grep parallèle en utilisant GNU parallel.
$ gzcat documents.json.gz | pv --rate -i 5 | parallel --pipe -j4 --round-robin grep some-pattern
Le débit est maintenant abaissé à ~ 260 Mo / s. Et ce qui est le plus intéressant parallel, c'est d'utiliser beaucoup de CPU. Plus que des grepprocessus (mais moins que gzcat).
EDIT 1 : J'ai essayé différentes tailles de blocs ( --block), ainsi que différentes valeurs pour -N/ -Loptions. Rien ne m'aide à ce stade.
Qu'est-ce que je fais mal?
--pipeest inefficace? Je veux dire que c'est une sorte de problème fondamental ou plus de mise en œuvre spécifique.