var timeout = setTimeout(operation, timeMs);
Lanza una operación tras un tiempo
clearTimeout(timeout);
Cancela la operación
var interval = setInterval(operation, timeMs);
Lanza una operación cada cierto tiempo
¡no es 100% preciso!
clearInterval(interval);
Cancela la repetición
var immediate = setImmediate(operation);
Lanza una operación inmediatamente
Tras los eventos de entrada/salida
(Sólo IE y Node.js)
clearImmediate(immediate);
Cancela la operación
Fuente: MDN Timers
Baja precisión: Date.now()
Fecha con milisegundos
Alta precisión: process.hrtime()
Segundos y nanosegundos
Crear un intervalo
Comprobar que no se respeta (!)
Ejecutar un intervalo cada milisegundo
Actualizar un contador cada vez
Tras un segundo, detener la ejecución
Mostrar el número de ejecuciones reales
y el tiempo real
y las iteraciones por segundo reales
$ npm install performance
$ npm start
Verificar el rendimiento de la máquinaprocess.argv
Contiene las opciones de comando
process.env
Contiene las variables de entorno
process.exit()
Sale del programa
process.memoryUsage()
Uso de memoria
Se capturan con process:
process.on('SIGINT', function() {
console.log('Mi sentido arácnido detecta un SIGINT');
});
Señales típicas:
SIGTERM: termina manualmente
SIGINT: Control-C
SIGHUP: desvincula la consola
SIGKILL: -9, no capturable
Crear 10000 objetos
Meterlos en un mapa
Comprobar la memoria usada
antes y después
Capturar las excepciones genéricas
Lanzar una excepción en el código
Verificar que se caza
Cazar Control-C y no salir
Fuente: EE Times
Así que, ¿qué piensas hacer con todos esos cores?
API "experimental" para controlar el multiproceso
Un master, varios workers
Los sockets se comparten
Fuente: GodTIC
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); }Fuente: cluster
Envío:
process.send(message);
Recepción:
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].on('message', messageHandler);
});
De los workers a master
También disponible al revés
Fuente: child_process
Arranca el servidor de sockets en cluster
Atrapa todas las excepciones sin cazar
Recuerda matar los workers al salir!
var net = require('net');
var port = 1702;
var server = net.createServer(function(connection) {
console.log('Connection to %s open', port);
connection.write('Hello?\r\n');
connection.on('data', function(data) {
if (String(data).trim() != 'hello) {
connection.write('ERROR\r\n');
} else {
connection.end('world\r\n');
console.log('Connection to %s closed', port);
}
});
});
server.listen(port);