Maison  >  Article  >  interface Web  >  Le thread unique du noeud réalise le principe de haute concurrence

Le thread unique du noeud réalise le principe de haute concurrence

小云云
小云云original
2018-02-07 13:36:402505parcourir

Cet article présente principalement le principe de la haute simultanéité des nœuds et des E/S asynchrones des nœuds. Si vous êtes intéressé, vous pourrez en apprendre davantage.

1. Principe d'implémentation d'un nœud monothread à haute concurrence

Comme nous le savons tous, nodejs est un langage de script monothread qui prend en charge une haute concurrence. . Mais pourquoi les nodejs monothread peuvent-ils prendre en charge une concurrence élevée ? Beaucoup de gens ne comprennent pas son principe. Laissez-moi parler de ma compréhension ci-dessous :

1 Avantages du nœud : le traitement intensif en E/S est la force du nœud, car les demandes d'E/S du nœud le sont. tous asynchrones (tels que : requête de requête SQL, requête d'opération de flux de fichiers, requête http...)

a.

Asynchrone : émettez une commande d'opération, puis vous pourrez faire autre chose. Une fois toutes les opérations terminées, le rappel est exécuté

Principe d'implémentation asynchrone :


// 第一步:定义变量
let a = 1;

// 第二步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)
setTimeout(() => {
 console.log(a);
}, 0)
// 第三步:赋值,回调函数没有执行
a = 2;
// 第四步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行)
setTimeout(() => {
 console.log(a);
}, 0)
// 第五步:赋值,回调函数没有执行
a = 3;
// 当所有代码执行完毕,cpu空闲下来了,就会开始执行异步队列里面的回调函数
// 所以最后控制台输出:3 3

b. Qu'est-ce que les E/S asynchrones ?

Comme son nom l'indique, les E/S asynchrones consistent à émettre des requêtes d'E/S de manière asynchrone

c Bien que nodejs puisse émettre des requêtes d'E/S de manière asynchrone, nodejs ne prend pas en charge le multi-threading. peut-il le supporter ? Qu'en est-il de la concurrence élevée ?

En raison de l'opération d'E/S de nodejs, le multithreading est activé en bas

Lorsqu'il y a plusieurs requêtes IO en même temps, le thread principal créera plusieurs threads eio pour améliorer l'efficacité des requêtes d'E/S Vitesse de traitement

Points de connaissances supplémentaires :

d Bien que les opérations d'E/S de nodejs permettent le multithread, tous les threads sont démarrés en fonction du thread principal et peuvent. ne s'exécute que dans un seul processus. Impossible d'utiliser pleinement les ressources du processeur

Le gestionnaire de processus pm2 peut résoudre ce problème

pm2 est un gestionnaire de processus pour les applications Node avec fonction d'équilibrage de charge.

e. CPU La relation entre le numéro de cœur et les threads

Dans l'ère passée du processeur unique, une seule tâche ne pouvait exécuter qu'un seul programme à un moment donné. Plus tard, il s’est développé vers l’étape multitâche, où l’ordinateur peut exécuter plusieurs tâches ou processus en parallèle au même moment. Bien qu'il ne s'agisse pas du « même moment » au sens propre du terme, plusieurs tâches ou processus partagent un processeur, et il appartient au système d'exploitation d'effectuer la commutation en cours du processeur entre plusieurs tâches, de sorte que chaque tâche ait le possibilité d'obtenir certains avantages en tranches horaires pour courir. Désormais, avec les processeurs multicœurs, plusieurs tâches peuvent être exécutées en même temps. Le cœur de processeur spécifique sur lequel cette tâche est exécutée est lié à la conception du système d'exploitation et du processeur lui-même

2. .Inconvénients du nœud : Pas bon pour les opérations gourmandes en CPU

a Que sont les opérations gourmandes en CPU (opérations complexes, opérations sur les images)


// 这就是一个cpu密集型的操作
for (let i = 0; i < 1000000; i++) {
 console.log(i);
}
b. Pourquoi nodejs n'est pas bon pour les opérations gourmandes en CPU

Parce que nodejs est monothread

Recommandations associées :


Single Explication détaillée des problèmes d'exécution JS threadés

Explication détaillée des caractéristiques des rappels io asynchrones monothread JS

Introduction détaillée à certaines choses sur JavaScript monothread (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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn