Maison interface Web js tutoriel Tutoriel d'introduction minimaliste Nodejs (3) : Process_node.js

Tutoriel d'introduction minimaliste Nodejs (3) : Process_node.js

May 16, 2016 pm 04:32 PM
nodejs 入门教程 进程

Bien que Node ait plusieurs threads, JavaScript exécuté sur la v8 est monothread. Le module child_process de Node est utilisé pour créer des processus enfants, et nous pouvons utiliser pleinement le processeur via les processus enfants. Exemple :

Copier le code Le code est le suivant :

var fork = require('child_process').fork;
// Récupère le nombre de CPU de la machine actuelle
var cpus = require('os').cpus();
pour (var i = 0; i < cpus.length; i ) {
// Générer un nouveau processus
Fourche('./worker.js');
>

Voici quelques méthodes de création de processus, y compris fork :

1.spawn(command, [args], [options]), démarre un nouveau processus pour exécuter la commande command, args est le paramètre de ligne de commande
2.exec(commande, [options], rappel), démarre un nouveau processus pour exécuter la commande commande, le rappel est utilisé pour obtenir l'entrée standard, la sortie standard et les informations d'erreur à la fin du processus
3.execFile(file, [args], [options], [callback]), démarre un nouveau processus pour exécuter le fichier exécutable, le rappel est utilisé pour obtenir l'entrée standard, la sortie standard et les informations d'erreur à la fin du processus
4.fork(modulePath, [args], [options]), démarre un nouveau processus pour exécuter un module de fichier JavaScript, et un processus enfant Node est créé à ce moment

Communication inter-processus des nœuds

Processus parent

Copier le code Le code est le suivant :

// parent.js
var fork = require('child_process').fork;
// fork renvoie l'objet processus enfant n
var n = fork('./child.js');
// Gérer le message d'événement
n.on('message', fonction(m) {
// Recevoir le message envoyé par le processus enfant
console.log('j'ai reçu un message : 'm);
});

//Envoyer un message au processus enfant
n.send({bonjour : 'monde'});

Processus enfant

Copier le code Le code est le suivant :

// enfant.js
// Gérer le message d'événement
process.on('message', function(m) {
console.log('j'ai reçu un message : 'm);
});

// Il existe une méthode d'envoi en cours, qui est utilisée pour envoyer des messages au processus parent
process.send({foo: 'bar'});

Il convient de noter que la méthode d'envoi ici est synchrone, il n'est donc pas recommandé d'envoyer de grandes quantités de données (vous pouvez utiliser pipe à la place, voir pour plus de détails : http://nodejs.org/api/ tout.html#child_process_child_process_spawn_command_args_options).
Dans des cas particuliers, si la valeur de l'attribut cmd dans le message contient le préfixe NODE_ (par exemple : message {cmd : 'NODE_foo'}), alors ce message ne sera pas soumis à l'événement message (mais à l'événement internalMessage), et ils sont utilisés en interne par Node.

Le prototype de la méthode

send est :

Copier le code Le code est le suivant :

envoyer(message, [sendHandle])

Ici, sendHandle(handle) peut être utilisé pour envoyer :

1.net.Native, socket ou canal C TCP natif
2.net.Serveur, serveur TCP
3.net.Socket, socket TCP
4.dgram.Native, socket C UDP natif
5.dgram.Socket, socket UDP

Lorsque send envoie sendHandle, il n'envoie pas (et ne peut pas) envoyer d'objets JavaScript directement, mais envoie un descripteur de fichier (éventuellement envoyé sous forme de chaîne JSON). D'autres processus peuvent utiliser ce descripteur de fichier pour restaurer l'objet correspondant.

Regardons maintenant un exemple :

Processus parent

Copier le code Le code est le suivant :

// parent.js
var fork = require('child_process').fork;

var n = fork('./child.js');

var serveur = require('net').createServer();
serveur.écouter (7000, fonction() {
//Envoyer le serveur TCP au processus enfant
n.send('serveur', serveur);
}).on('connexion', function() {
console.log('connexion - parent');
});

Processus enfant

Copier le code Le code est le suivant :

process.on('message', function(m, h) {
Si (m === 'serveur') {
          h.on('connexion', function() {
console.log('connexion - enfant');
});
>
});

Accédez à ce programme via le port 7000, et la sortie peut être connexion – parent ou connexion – enfant. Ici, le processus enfant et le processus parent écoutent sur le port 7000 en même temps. De manière générale, plusieurs processus écoutant le même port provoqueront une exception EADDRINUSE. Dans ce cas, deux processus différents utilisent le même descripteur de fichier et la couche inférieure de Node définit l'option SO_REUSEADDR sur le socket lors de l'écoute sur le port. permet à ce socket d'être réutilisé entre différents processus. Lorsque plusieurs processus écoutent le même port, le descripteur de fichier ne peut être utilisé que par un seul processus à la fois et l'utilisation des sockets par ces processus est préemptive.

module cluster

Le module cluster a été ajouté dans Node v0.8. Grâce au module cluster, vous pouvez facilement créer un groupe de processus écoutant le même port sur une machine physique. Exemple :

Copier le code Le code est le suivant :

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

// Vérifiez si le processus est le processus maître
si (cluster.isMaster) {
pour (var i = 0; i < numCPUs; i)
// Générer un nouveau processus de travail (seul le processus maître peut être appelé)
        cluster.fork();

cluster.on('exit', function(worker, code, signal) {
console.log('worker ' worker.process.pid ' est mort');
});
} autre {
http.createServer(function(req, res) {
           res.writeHead(200);
          res.end('hello worldn');
}).écouter(8000);
>

Nous appelons la méthode d'écoute dans le processus de travail, et la demande d'écoute sera transmise au processus maître. Si le processus maître dispose déjà d'un serveur d'écoute qui répond aux exigences du processus de travail, alors le handle de ce serveur sera transmis au travailleur. S'il n'existe pas, le processus maître en créera un puis transmettra le handle au processus maître. processus de travail.

Documentation plus détaillée sur le cluster : http://www.nodejs.org/api/cluster.html

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nodejs est-il un framework backend ? Nodejs est-il un framework backend ? Apr 21, 2024 am 05:09 AM

Node.js peut être utilisé comme framework backend car il offre des fonctionnalités telles que des performances élevées, l'évolutivité, la prise en charge multiplateforme, un écosystème riche et une facilité de développement.

Comment connecter Nodejs à la base de données MySQL Comment connecter Nodejs à la base de données MySQL Apr 21, 2024 am 06:13 AM

Pour vous connecter à une base de données MySQL, vous devez suivre ces étapes : Installez le pilote mysql2. Utilisez mysql2.createConnection() pour créer un objet de connexion contenant l'adresse de l'hôte, le port, le nom d'utilisateur, le mot de passe et le nom de la base de données. Utilisez connection.query() pour effectuer des requêtes. Enfin, utilisez connection.end() pour mettre fin à la connexion.

Quelles sont les variables globales dans nodejs Quelles sont les variables globales dans nodejs Apr 21, 2024 am 04:54 AM

Les variables globales suivantes existent dans Node.js : Objet global : global Module principal : processus, console, nécessiter Variables d'environnement d'exécution : __dirname, __filename, __line, __column Constantes : undefined, null, NaN, Infinity, -Infinity

Quelle est la différence entre les fichiers npm et npm.cmd dans le répertoire d'installation de nodejs ? Quelle est la différence entre les fichiers npm et npm.cmd dans le répertoire d'installation de nodejs ? Apr 21, 2024 am 05:18 AM

Il existe deux fichiers liés à npm dans le répertoire d'installation de Node.js : npm et npm.cmd. Les différences sont les suivantes : différentes extensions : npm est un fichier exécutable et npm.cmd est un raccourci de fenêtre de commande. Utilisateurs Windows : npm.cmd peut être utilisé à partir de l'invite de commande, npm ne peut être exécuté qu'à partir de la ligne de commande. Compatibilité : npm.cmd est spécifique aux systèmes Windows, npm est disponible multiplateforme. Recommandations d'utilisation : les utilisateurs Windows utilisent npm.cmd, les autres systèmes d'exploitation utilisent npm.

Y a-t-il une grande différence entre nodejs et java ? Y a-t-il une grande différence entre nodejs et java ? Apr 21, 2024 am 06:12 AM

Les principales différences entre Node.js et Java résident dans la conception et les fonctionnalités : Piloté par les événements ou piloté par les threads : Node.js est piloté par les événements et Java est piloté par les threads. Monothread ou multithread : Node.js utilise une boucle d'événements monothread et Java utilise une architecture multithread. Environnement d'exécution : Node.js s'exécute sur le moteur JavaScript V8, tandis que Java s'exécute sur la JVM. Syntaxe : Node.js utilise la syntaxe JavaScript, tandis que Java utilise la syntaxe Java. Objectif : Node.js convient aux tâches gourmandes en E/S, tandis que Java convient aux applications de grande entreprise.

Nodejs est-il un langage de développement back-end ? Nodejs est-il un langage de développement back-end ? Apr 21, 2024 am 05:09 AM

Oui, Node.js est un langage de développement backend. Il est utilisé pour le développement back-end, notamment la gestion de la logique métier côté serveur, la gestion des connexions à la base de données et la fourniture d'API.

Lequel choisir entre nodejs et java ? Lequel choisir entre nodejs et java ? Apr 21, 2024 am 04:40 AM

Node.js et Java ont chacun leurs avantages et leurs inconvénients en matière de développement Web, et le choix dépend des exigences du projet. Node.js excelle dans les applications en temps réel, le développement rapide et l'architecture de microservices, tandis que Java excelle dans la prise en charge, les performances et la sécurité de niveau entreprise.

Nodejs peut-il écrire du front-end ? Nodejs peut-il écrire du front-end ? Apr 21, 2024 am 05:00 AM

Oui, Node.js peut être utilisé pour le développement front-end, et les principaux avantages incluent des performances élevées, un écosystème riche et une compatibilité multiplateforme. Les considérations à prendre en compte sont la courbe d’apprentissage, la prise en charge des outils et la petite taille de la communauté.

See all articles