GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est le surcoût lié à l'utilisation de sous-shells ?

Les sous-shells ont une surcharge.

Sur mon système, le coût minimal de fork-exec (lorsque vous exécutez un programme à partir du disque lorsque le fichier n'est pas froid) est d'environ 2ms et le coût de bifurcation minimal est d'environ 1ms .

Avec les sous-shells, vous ne parlez que du coût de la bifurcation, car aucun fichier n'a besoin d'être exec éd. Si les sous-shells sont maintenus raisonnablement bas, 1ms est tout à fait négligeable dans les programmes destinés aux humains. Je crois que les humains ne peuvent rien remarquer qui se passe plus vite que 50ms (et c'est le temps qu'il faut pour que les interpréteurs de langage de script modernes commencent même (je parle de python et rubis en rvm ici) avec le dernier nodejs environ 100ms ).

Cependant, cela s'additionne avec des boucles, et vous voudrez peut-être remplacer par exemple le bactick plutôt commun ou $() modèle où vous return quelque chose d'une fonction en l'imprimant sur stdout pour que le shell parent capture avec des bashismes comme printf -v (ou utilisez un programme externe rapide pour traiter l'ensemble du lot).

Le package bash-completion évite spécifiquement ce coût de sous-shell en retournant via des noms de variables passés en utilisant une technique décrite sur http://fvue.nl/wiki/Bash:_Passing_variables_by_reference

Comparer

time for((i=0;i<10000;i++)); do echo "$(echo hello)"; done >/dev/null 

avec

time for((i=0;i<10000;i++)); do echo hello; done >/dev/null 

devrait vous donner une bonne estimation de ce que vos systèmes fork -ing frais généraux est.


Linux
  1. Quels serveurs DNS est-ce que j'utilise ?

  2. Quelle est la différence de rediriger une sortie en utilisant >, &>, >&et 2&> ?

  3. Quel est l'intérêt d'utiliser la macro linux access_ok()

  4. Comment savoir ce qui utilise tout l'espace sur ma partition / ?

  5. Qu'est-ce que le système de fichiers NSFS ?

Utilisation du fichier de configuration SSH

Qu'est-ce qu'une Rolling Release Linux et quel est le véritable avantage de l'utiliser

Qu'est-ce que le Shell sous Linux ?

Détecter le système d'initialisation à l'aide du shell ?

Le véritable avantage d'utiliser les Uuids ?

Comment déterminer ce qui utilise le plus d'espace disque sur un serveur Linux ?