web-dev-qa-db-fra.com

Qu'est-ce qui compte comme des tâches intensives en CPU (par exemple, tri, recherche, etc.)

Que comptez-vous comme une tâche gourmande en ressources processeur. En termes de ... un algorithme/code par exemple (pas tellement un cas d'utilisation comme le montage vidéo, etc.). La raison en est qu'il semble que la principale raison de ne pas utiliser NodeJS, ce que j'aime vraiment est principalement une tâche intensive en CPU. Alors qu'est-ce qui compte comme ça? Est-ce le tri, la recherche, le graphe transversal, la multiplication matricielle, par exemple?

23
Jiew Meng

Les termes comme "intensif" ou "coûteux" sont relatifs et il n'est pas toujours évident de savoir quelles activités sont gourmandes en ressources processeur. D'une manière générale, tout ce qui n'est pas des E/S est un processeur. Et les E/S sont asynchrones dans node.js, donc pas de problème. Par conséquent, nous nous retrouvons avec tout sauf les E/S coûteuses.

Votre approche pour choisir des modèles généraux est sage. Le tri, la recherche et même les algorithmes en général sont liés au processeur. Bien sûr, vous ne pouvez pas éliminer l'utilisation du processeur, mais si vous pouvez faire le tri de votre base de données au lieu du code de votre application, vous serez peut-être mieux.

Je garderais également un œil sur les grandes boucles. Une boucle qui ne déclenche aucun événement asynchrone est un goulot d'étranglement. Bien sûr, on ne peut pas éviter entièrement les boucles. Ils font partie de la vie de la programmation. Si vos boucles sont courtes, pas de problème. Si vous trouvez une boucle qui s'exécute 10 000 fois, vous pouvez envisager de la briser à l'aide de setTimeout, process.nextTick ou d'un processus de nœud distinct.

10 000 ont été choisis arbitrairement. Cela dépend de ce que fait la boucle. Votre kilométrage peut varier.

20
Brandon

Les processus ou tâches qui s'exécutent sur un ordinateur nécessitent diverses ressources telles que les cycles CPU, la mémoire, le disque ou le réseau qui sont gérés par le système d'exploitation, de sorte que chaque tâche s'exécute efficacement (sans attendre une ressource si possible).

Le système d'exploitation essaie de maximiser l'utilisation des ressources en laissant de nombreux processus utiliser les ressources simultanément. Si un processus demande une ressource particulière en grande quantité, il peut gêner (retarder) son exécution. On dit que le processus consomme beaucoup de ressources par rapport à cette ressource. Une terminologie relative est donc gourmande en ressources.

Le tri, la recherche, le parcours de graphe, la multiplication par matrice sont toutes des opérations du processeur, un processus est CPU-intensive ou non cela dépend de la fréquence et de la fréquence de leur exécution. Par exemple trans-coding video ou compressing files est assez gourmand en CPU, car ils exécutent les opérations CPU bien plus qu'il n'en faut pour lire/écrire de la mémoire ou du disque. Si vous prévoyez de faire cela, vous devez créer un processus enfant séparé pour celui-ci, afin qu'il ne ralentisse pas le processus de nœud, qui est à un seul thread, ou mieux crée un cluster de nœuds .

9
user568109

Le script Bash entre vraiment dans ce domaine. Mon professeur nous parle toujours d'écrire du code efficace qui facilitera le travail sur le processeur

Voici un bon exemple de pratiques inefficaces sous Linux

http://hacktux.com/bash/script/efficace

Un autre exemple auquel je peux penser est celui des fonctions récursives, ou des fonctions qui s'appellent continuellement jusqu'à ce qu'une condition soit satisfaite. Ceux-ci consomment généralement beaucoup de puissance CPU.

1
onTheInternet