• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Node.js: parallelizzare il lavoro con il modulo cluster

By Giuseppe Maggi | on 28 Agosto 2017 | 0 Comment
Risorse utili
Logo node.js

Node.js deve buona parte del suo successo all’efficienza che lo contraddistingue: consuma poche risorse e lavora su un unico thread permettendo comunque attività asincrone. Questi ed altri vantaggi l’hanno reso molto utile per creare servizi di piccole dimensioni in grado di modularizzare il lavoro: approccio ideale in un’epoca che vede il successo delle architetture basate su Microservizi.

Il modulo di cui parliamo oggi si chiama cluster e permette di parallelizzare il lavoro creando un processo server in grado di generare suoi propri figli tramite il metodo fork.

Ribadiamo che stiamo trattando di creazione di processi multipli, quindi non multi-threading in uno stesso processo, pertanto i worker, ossia i processi figlio, potranno comunicare tra loro utilizzando le tecniche di IPC (InterProcess Communication).

Vediamo come funziona questo modulo:

  1. scriveremo una porzione di codice che dovrà essere svolta dal processo iniziale, detto master, nella quale essenzialmente andremo ad effettuare le fork per creare i processi figlio;
  2. nella porzione di script relativo ai processi figlio eseguiremo il codice che vorremo parallelizzare. Si noti a questo punto che, in un cluster, tipicamente tutti i processi figlio svolgono lo stesso tipo di attività.

Molto interessante è anche considerare che se nel codice dei processi worker attiveremo un servizio – ad esempio, API REST con Express – tutti i processi figlio rimarranno in ascolto sulla stessa porta creando effettivamente un cluster in grado di bilanciare il carico di risposta di un medesimo servizio.

Nell’esempio seguente, creiamo un servizio REST, con tanti processi figlio quanti ne permette il processore (tramite il modulo os verifichiamo il numero di CPU disponibili) ed ogni figlio eseguirà le API Express sulla stessa porta TCP, in questo caso la 4200:

var cluster = require('cluster');

if(cluster.isMaster) {
    
    // codice processo master: facciamo partire i processi worker
    var numCPU = require('os').cpus().length;

    // eseguiamo tante fork quanti sono le CPU disponibili
    for(var i = 0; i < numCPU; i++) {
        cluster.fork();
    }

} else {
    // codice del processo worker
    var app = require('express')();

    app.get('/', function (req, res) {
	res.send('Risposta dal processo ' + process.pid);
    });

    var server = app.listen(4200, function() {
        console.log('Avviato processo con PID ' + process.pid);
    });

   
}

All’interno del codice dei worker (nel blocco else, in pratica) abbiamo disponibile anche la variabile process tramite la quale potremo leggere il PID, l’identificativo univoco che distingue il processo nel sistema operativo.

Sull’oggetto cluster potremo anche reagire ad una serie di eventi relativi ai processi worker come online che ne segnala l’entrata in funzione ed exit che ne notifica la conclusione del lavoro. La sintassi di impiego sarà la seguente:

var cluster = require('cluster');
...
...
cluster.on('online', function(worker) {
     /* worker (un processo figlio) entrato in esecuzione
        tramite worker.process ne possiamo leggere le proprietà */
    });

 

Ecco un altro esempio di come Node.js sia in grado fornire un servizio utile con poche righe di codice. Efficienza, flessibilità e semplicità: queste le sue parole d’ordine.
Che ne pensate? Fateci sapere!

Share this story:
  • tweet

Tags: api restclusterexpressinterprocess communicationipcjavascriptmulti-processmulti-threadingnode.jsTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Iniziamo a programmare con micro:bit

    1 Marzo 2018 - 0 Comment
  • micro:bit, un microntroller per imparare a programmare già dai 7 anni

    28 Febbraio 2018 - 0 Comment
  • jsGrid: plugin jQuery per mostrare i dati con efficienza

    23 Febbraio 2018 - 0 Comment

Author Description

No Responses to “Node.js: parallelizzare il lavoro con il modulo cluster”

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO