2017-09-25 6 views
2

Je souhaite exécuter 100 tâches de réseau (non cpu intense) en parallèle et je souhaite comprendre la meilleure approche.Lancement de tâches réseau parallèles à l'aide de xargs tout en minimisant la surcharge de commutation de contexte

Plus précisément, est-il possible d'exécuter plus de 100 tâches en utilisant xargs et quels sont les inconvénients? Je comprends qu'il y a un point où il y a plus de changement de contexte que de traitement de paquets réel. Comment comprendre où ce point est et quelle est la meilleure façon de le minimiser?

Par exemple, y a-t-il de meilleurs outils pour utiliser d'autres xargs, etc.?

+0

boucle Un peu plus du fichier et appeler la fonction pour chacun? C'est juste une boucle. –

+0

@MartijnPieters J'ai mis à jour le post pour rendre l'objectif beaucoup plus clair. La principale préoccupation est la viabilité du lancement de plus de 100 travaux réseau et de minimiser les frais de changement de contexte en même temps. – GNettlefold

+0

Je pense que cela pourrait être trop large, mais j'ai rouvert de toute façon. –

Répondre

1

Mieux va souvent être une question de goût.

En utilisant GNU parallèle vous pouvez faire quelque chose comme ça pour aller chercher 100 images en parallèle:

seq 1000 | parallel -j100 wget https://foo.bar/image{}.jpg 

Si vous souhaitez obtenir des données de 100 serveurs et vous obtenez une gamme complète chaque fois:

parallel -a servers.txt -j0 --line-buffer my_connect {} 

Ou:

parallel -a servers.txt -j0 --line-buffer --tag my_connect {} 

GNU Parallel est un paralléliseur général qui facilite l'exécution de tâches en parallèle o n sur la même machine ou sur plusieurs machines auxquelles vous avez accès.

Si vous avez 32 emplois différents que vous voulez exécuter sur 4 processeurs, une voie à suivre directement à paralléliser est d'exécuter 8 emplois sur chaque CPU:

Simple scheduling

parallèle GNU fraie à la place un nouveau processus lorsque on finit - garder les CPU active et un gain de temps:

GNU Parallel scheduling

InstallationPour des raisons de sécurité, vous devez installer GNU Parallel avec votre gestionnaire de paquets, mais si GNU Parallel n'est pas empaqueté pour votre distribution, vous pouvez faire une installation personnelle, qui ne nécessite pas d'accès root. Il peut être fait en 10 secondes en faisant ceci:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash 

Pour d'autres options d'installation, voir http://git.savannah.gnu.org/cgit/parallel.git/tree/README

En savoir plus

Voir d'autres exemples: http://www.gnu.org/software/parallel/man.html

Regardez l'intégralité des vidéos d'intro: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Promenade à travers t il tutoriel: http://www.gnu.org/software/parallel/parallel_tutorial.html

Inscrivez-vous à la liste de courrier électronique pour obtenir de l'aide: https://lists.gnu.org/mailman/listinfo/parallel

+0

Merci pour votre réponse Ole. Une question que j'ai pour vous est de savoir si cela fonctionne bien pour les emplois de longue durée aussi? Ce sont ceux avec une durée de vie indéfinie (par exemple serveur web). – GNettlefold

+0

Vous devez probablement être plus précis. Allez-vous exécuter 100 serveurs Web en parallèle? –

+0

Je souhaite consommer des données d'environ 100 flux. Environ 80 d'entre eux ont 1 événement toutes les 2 secondes, et les 20 autres ont environ un événement par seconde. Le flux de données est continu et ne se termine jamais. – GNettlefold