Sortie confuse du temps

Cette commande obtient des données de MySQL et les manipule ensuite. Pourquoi le temps réel est-il beaucoup plus élevé que le temps utilisateur?

>time ./command.rb real 45m45.457s user 3m36.478s sys 0m28.226s 

Pour plus de clarté, je comprends la différence entre la sortie réelle, utilisateur et sys. Cependant, je ne comprends pas pourquoi il y a une si grande différence. La machine sur laquelle j’exécute n’a pratiquement rien d’autre qui utilise le CPU, et je n’ai aucun thread dans ma commande. Tout ce qu’il fait, c’est récupérer des données. Une déclaration MySQL complexe pourrait-elle être la cause d’une telle lacune?

user et sys signalent la durée pendant laquelle le processeur est occupé. Le processeur ne sera pas occupé lorsqu’il est bloqué sur quelque chose, comme le réseau ou les E / S disque. Essayez, par exemple, “time sleep 1”, ou “time dd if = / dev / zero de = / dev / null bs = 1024 count = 1000000” pour voir les différences. Le premier ne fait que bloquer, le second comprendra beaucoup d’utilisation du processeur.

Le système passe le plus clair de son temps à attendre que les disques tournent et se dirige vers la recherche.

Le temps “utilisateur” est le temps réellement passé par les chiffres de calcul du processeur pour vous.

Le “temps réel” correspond à la durée réelle de l’horloge murale, où les temps “utilisateur” et “système” correspondent à la quantité de temps processeur utilisée pour votre travail dans chaque classe de traitement. Pour que le «vrai» temps soit beaucoup plus élevé, votre travail a probablement passé beaucoup de temps à attendre des ressources ou à dormir.

Il suffit de deviner, mais si vous consultez les résultats via une connexion ssh, il est possible que vous attendiez une grande partie de votre temps à ce que le processeur crypte les données à envoyer à votre console distante.