Comprendre les tâches à forte intensité de processeur et les E / S est essentielle pour optimiser les applications et choisir la bonne pile technologique. Ces concepts sont principalement liés aux goulots d'étranglement des performances des applications, ce qui peut aider les développeurs à concevoir des programmes multi-thread et asynchrones très efficaces.
Modèle système
Le système informatique peut être abstrait comme:
<code>输入 (键盘) -> 处理 (CPU) -> 输出 (显示器)</code>
Copier après la connexion
l'entrée et la sortie appartiennent à la catégorie d'E / S, et le calcul est traité par le CPU.
Programme unique composé de plusieurs méthodes ou fonctions dans l'ordre ou l'exécution parallèle peut être abstraite comme suit:
<code>输入参数 -> 计算 -> 返回值</code>
Copier après la connexion
Un service distribué composé d'un service (cluster) (cluster) en cours dans l'ordre ou parallèle peut être résumé comme:
<code>网络请求 (输入参数) -> 计算 -> 网络响应 (返回值)</code>
Copier après la connexion
La demande et la réponse appartiennent à la catégorie d'E / S, et le calcul est traité par le CPU.
Du point de vue du matériel et des logiciels, le système se compose d'un fonctionnement des E / S et d'un calcul du processeur.
tâche dense du CPU
La tâche intensive du CPU est principalement limitée par la vitesse de traitement du processeur central (CPU). Ces tâches nécessitent beaucoup de calculs, et la plupart du temps utilisent le CPU au lieu d'attendre des ressources externes, telles que les E / S de disque ou la communication réseau.
Les caractéristiques de la tâche dense du CPU
Exigences informatiques élevées - : Ces tâches impliquent généralement des opérations mathématiques complexes, telles que le codage / le décodage vidéo, le traitement d'image et l'informatique scientifique.
Avantages multi-threads
: Sur les processeurs multi-oreaux, le traitement parallèle peut améliorer considérablement l'efficacité d'exécution de la tâche intensive du CPU en allouant les charges de travail à plusieurs noyaux. -
Consommation des ressources élevées :: Les tâches à forte intensité de CPU poussent souvent le taux d'utilisation du CPU à près de 100% pendant la période d'exécution.
-
Exemples communs
Analyse des données et calculs numériques importants.
Logiciel de rendu graphique ou de traitement vidéo.
- Exploration de crypto-monnaie.
-
Si votre ventilateur d'ordinateur portable s'exécute très fort, il peut être traité avec la tâche à forte intensité de CPU. -
Stratégie d'optimisation de la tâche dense du CPU
Passalized
: Utilisez des processeurs multi-oreaux pour améliorer les performances grâce à l'informatique parallèle.
Optimisation de l'algorithme - : Optimiser l'algorithme pour réduire les calculs inutiles.
Optimisation du compilateur
: Utilisez des compilateurs avec une technologie d'optimisation à haute performance. -
Tâche d'E / S-dense
- Les tâches de tension d'E / S sont principalement limitées par l'opération d'entrée / sortie (E / S), y compris les E / S de disque et la communication réseau. Le goulot d'étranglement de ces tâches est d'attendre que l'opération d'E / S se termine, et non la puissance de calcul.
Caractéristiques des tâches en cas d'E / S
- Exigences d'E / S élevées : Ces tâches lisent et écrivent fréquemment des fichiers ou traitent un grand nombre de demandes de réseau.
Les avantages des tâches simultanées - : des E / S bénéficient des modèles de programmation d'événements et de programmation asynchrones, tels que Node.js non bloquants E / S.
Utilisation faible de CPU
: La plupart du temps, la plupart du temps est consacrée à l'attente des opérations externes, le taux d'utilisation du CPU est généralement faible. -
Exemples communs
Gérer un grand nombre de serveurs Web et de serveurs de base de données.
Lire fréquemment et écrire un serveur de fichiers de disque. -
Les applications clients, telles que les clients de messagerie et les applications de médias sociaux, ces applications nécessitent des demandes de réseau fréquentes et une récupération de données. -
- Optimisation des tâches à forte intensité d'E / S
Caches
: Utilisez le cache de mémoire pour réduire la demande d'E / S disque.
- Programmation asynchrone : Implémentez les opérations d'E / S asynchrones pour éviter l'obstruction, améliorant ainsi la vitesse de réponse et le débit.
Optimisation de la gestion des ressources - : Dé répartition efficace des opérations d'E / S pour minimiser la lecture et l'écriture inutiles.
Node.js et les E / S non bloquantes -
Node.js est une implémentation bien connue du modèle d'E / S.
Qu'est-ce que les E / S non bloquantes?
Les E / S non bloquantes se réfèrent à l'opération d'entrée / sortie qui ne sera pas obligée de terminer. Cette méthode permet au programme d'effectuer d'autres tâches en attendant l'opération d'E / S.
node.js Comment gérer les E / S non bloquantes?
Node.js exécute JavaScript sur le moteur V8 et utilise la bibliothèque Libuv pour réaliser des E / S non bloquantes et une programmation asynchrone. Les composantes clés des E / S non bloquantes dans Node.js sont:
Cycle incident : Node.js permet le mécanisme central des E / S non bloquantes. Il permet un traitement simultané de la communication réseau, des E / S de fichiers, du fonctionnement de l'interface utilisateur et de l'événement de minuterie.
Appelez la pile
: Toutes les opérations synchrones (telles que l'opération d'obstruction du calcul ou du traitement direct des données) sont exécutées dans la pile. La longue opération dans la pile peut bloquer le programme, provoquant la stagnement du «thread principal».
- La file d'attente de rappel : Lorsque l'opération asynchrone est terminée, leur fonction de rappel sera mise dans la file d'attente et attendra l'exécution. Le cycle d'événement continue de vérifier la file d'attente et de déplacer le rappel exécutable vers la pile d'appels pour exécuter.
Opération non bloquante - : Pour l'opération du système de fichiers, Node.js utilise la bibliothèque Libuv pour utiliser l'API Posix non bloquante sous-jacente pour activer la fonction non bloquante. Pour les demandes de réseau, Node.js réalise les E / S de réseau non bloquantes.
Considérez l'exemple suivant: -
Dans cet exemple, Fs.Readfile est asynchrone. Node.js continue d'exécuter Console.log ('Next Step') sans attendre la lecture du fichier. Une fois le fichier lu, la fonction de rappel sera mise en file d'attente et finalement exécutée, affichant le contenu du fichier.
En utilisant le rappel basé sur l'incident, un seul thread peut gérer efficacement plusieurs opérations, ce qui peut considérablement améliorer les performances et l'utilisation des ressources lorsqu'ils traitent des tâches à forte intensité d'E / S.
node.js Le fonctionnement du système de fichiers non bloquants
Lorsque Node.js effectue un fonctionnement du système de fichiers (tel que la lecture des fichiers), il utilise Libuv au lieu d'appeler directement l'API du système de fichiers POSIX. Libuv détermine le moyen le plus efficace d'effectuer ces opérations, tout en empêchant le cycle de l'incident d'être bloqué.
libuv maintient un pool de threads de taille fixe (par défaut: quatre threads) pour effectuer le fonctionnement des E / S de blocage du niveau du système d'exploitation de manière asynchrone. Par conséquent, l'opération d'E / S du fichier est effectuée sur ces threads d'arrière-plan, plutôt que de bloquer la boucle de l'incident principal.
libuv suit Modèle producteur-consommateur , dont:
- Le thread principal soumet la tâche (telle que la demande de lecture de fichiers) dans la file d'attente de la tâche.
- Le pool de thread récupère et exécute la tâche à partir de la file d'attente.
- Une fois l'achèvement, le thread de travail notifie le thread principal pour effectuer la fonction de rappel.
Cela garantit que le thread principal peut maintenir une légèreté et une réponse rapidement même pendant la période de fonctionnement des E / S lourde.
Conclusion
Choisir la bonne méthode de traitement et la bonne pile technologique est essentielle pour améliorer les performances des applications. Par exemple, Node.js est très adapté au traitement des applications Web de tendance d'E / S car il dispose de modèles d'E / S non bloquants qui peuvent gérer efficacement un grand nombre de demandes de réseau simultanées sans consommation excessive de ressources de thread. Au contraire, pour la tâche à forte intensité de CPU, l'utilisation de langage et de plates-formes multi-thread (telles que Java, C ou GO) peut utiliser des capacités de traitement CPU multi-ore.
Nous sommes Leapcell, votre projet hôte Node.js est le premier choix.
Leapcell est utilisé pour l'hébergement Web, les tâches asynchrones et une nouvelle génération sans plate-forme de serveur pour redis:
Prise en charge multi-language
Utilisez Node.js, Python, Go ou Rust pour le développement.
Déploiement gratuit de projets illimités -
Payez simplement pour les demandes d'utilisation, il n'y a pas de frais.
Avantages de coûts inégalés Payer à la demande sans avoir à être inactif.
Par exemple: 25 $ prend en charge 6,94 millions de demandes, avec un temps de réponse moyen de 60 millisecondes.
Expérience des développeurs simplifiés -
-
UI intuitif, paramètres faciles.
Pipeline CI / CD complètement automatisé et intégration Gitops.
Les indicateurs de temps réel et les enregistrements de journal fournissent des informations opérationnelles.
- Expansion facile et haute performance
-
- Extension automatique pour gérer facilement les hauts et la fusion.
Zero Fondements de fonctionnement - Just Focus on Construction.
Apprenez plus d'informations dans le document!
Suivez notre x: @LeapCellHQ
Lisez notre blog
Veuillez noter que je conserve le format et l'emplacement d'origine de toutes les images. Comme je n'ai pas la possibilité d'accéder au lien photo, je ne peux décrire l'image que dans le texte. Si vous avez besoin d'une pseudo-originale plus précise, veuillez fournir la description de texte alternative de l'image.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!