2015-11-25 1 views
0

Ce n'est pas tellement une question de programmation, mais plutôt un problème que j'ai rencontré récemment, que j'essaie de comprendre. Par exemple, exécuter une commande ls dans linux prend peut-être ..... 1 sec. Mais lorsque je lance simultanément plusieurs milliers de commandes ls, j'ai remarqué que certaines opérations ne sont pas en cours d'exécution et prennent un temps très long à s'exécuter.Pourquoi exécuter plusieurs commandes identiques prend beaucoup de temps

Pourquoi est-ce le cas? Et comment pouvons-nous contourner cela?

Merci d'avance.

MISE À JOUR:

je l'ai fait une ps, et vit que deux des ls commandes étaient dans l'état de D<. J'ai vérifié un peu, et je comprends que c'est un sommeil ininterrompu. Qu'est-ce que c'est? Et quand cela arrivera-t-il? Comment éviter cela?

+1

La création d'un processus n'est pas gratuite. –

Répondre

0

Le nombre de processus ou d'unités d'exécution pouvant s'exécuter simultanément est limité par le nombre de cœurs de votre machine. Si vous lancez des milliers de processus ou de threads simultanément, le noyau ne peut exécuter que 'n' (où n est égal au nombre de cœurs disponibles) en même temps, certains d'entre eux devront attendre pour être planifiés.

Si vous souhaitez exécuter simultanément plus de processus ou de threads, vous devez augmenter le nombre de cœurs disponibles dans le système (par exemple en ajoutant des processeurs, en activant l'hyperthreading si disponible).