Multi-threading vs. node.js

26 Set

Ieri si è tenuta a Brescia la prima conferenza italiana dedicata a Node.js

Node.js è un framework event-driven I/O per il motore JavaScript V8. Si tratta di un framework relativo all’utilizzo server-side di Javascript per realizzare applicativi scalabili e real-time. È simile come funzionalità a Twisted in Python, Perl Object Environment in Perl o a Event machine in Ruby.Node.js è in questo momento una delle tecnologie più discusse in rete. Sicuramente Node.js avrà un ruolo fondamentale nei prossimi anni nello sviluppo di applicativi web data la continua e pressante richiesta di applicativi real-time e scalabili. Inoltre il linguaggio utilizzato è JavaScript, linguaggio ampiamente utilizzato e conosciuto dagli sviluppatori web.

Node.js, rispetto agli altri web server disponibili oggi sul mercato, ha un grande vantaggio: offre prestazioni molto elevate ed un consumo di risorse molto limitato. Node.js ha un’altra caratteristica peculiare: è un processo mono-thread.

L’obiettivo di Node.js è quello di fornire un modo semplice per costruire software di rete scalabili. Basta guardare il classico esempio “Hello world” per capire la radicale differenza rispetto agli altri web-server:

1
2
3
4
5
6
7
var http = require(‘http’);
http.createServer(function (req, res) {
  res.writeHead(200, {‘Content-Type’: ‘text/plain’});
  res.end(‘Hello World\n’);
}).listen(1337, “127.0.0.1”);
console.log(‘Server running at http://127.0.0.1:1337/’);
Node.js dice al sistema operativo (tramite epoll, kqueue, /dev/poll, o select) che dovrebbe essere notificato quando una nuova connessione viene fatta, e poi va a dormire. Ad ogni nuova connessione, poi esegue una callback. Ogni connessione necessità quindi di una piccola allocazione sullo heap. Questo è in contrasto con modello di concorrenza più comune di oggi, dove sono impiegati i thread del sistema operativo. Il Thread-based networking è relativamente inefficiente e molto difficile da usare (vedi: questo e questo ).

Node.js mostra tutta la sua efficienza nella gestione della memoria con carichi di lavoro elevati rispetto ai sistemi che per ogni connessione allocano 2MB di thread stack. Inoltre, gli sviluppatori di Node.js sono liberi da preoccupazioni di dead-lock del processo perchè non ci sono lock. Quasi nessuna funzione di Node.js esegue direttamente operazioni di I / O, così che il processo non si blocca mai. Visto che nessuno blocca nulla, anche programmatori meno esperti sono in grado di sviluppare sistemi molto performanti con il minimo sforzo. Altra nota interessante: utilizzando un solo thread per tutte le richieste gli sviluppatori non devono preoccuparsi del’accesso concorrente alle risorse perchè questo caso semplicemente non può avvenire: c’è un solo thread quindi solo una connessione accede ad un risorsa in un determinato istante.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: