Ho problemi a capire esattamente come process.nextTick
fa la sua cosa. Credevo di aver capito, ma io non riesco a replicare come mi sento questo dovrebbe funzionare:comprensione della coda eventi node.js e process.nextTick
var handler = function(req, res) {
res.writeHead(200, {'Content-type' : 'text/html'});
foo(function() {
console.log("bar");
});
console.log("received");
res.end("Hello, world!");
}
function foo(callback) {
var i = 0;
while(i<1000000000) i++;
process.nextTick(callback);
}
require('http').createServer(handler).listen(3000);
Mentre foo
è looping, io inviare più diverse richieste, partendo dal presupposto che handler
verranno accodate più volte dietro foo
con callback
in coda solo quando foo
è terminato.
se sono corrette su come funziona, presumo il risultato sarà simile a questa:
received
received
received
received
bar
bar
bar
bar
ma non è così, è solo sequenziale:
received
bar
received
bar
received
bar
received
bar
vedo che foo
restituisce prima di eseguire callback
che è previsto, ma sembra che il numero callback
sia NEXT in linea, piuttosto che alla fine della coda, dietro tutte le richieste in arrivo. È così che funziona? Forse sto solo non capendo come funziona esattamente la coda degli eventi nel nodo. E per favore non puntarmi here. Grazie.
No, 'setTimeout' si comportava allo stesso modo. Suppongo che mi stia davvero chiedendo come dovrei iniziare ad elaborare le richieste HTTP prima che una richiesta precedente sia finita. – alf
In realtà, ho capito che 'setTimeout' fa esattamente quello che stavo cercando, quindi mi scuso. Ma che cosa è esattamente 'process.nextTick' se non consente l'interleaving delle attività intensive della cpu e l'elaborazione http? – alf
"non alla fine del tick" - quindi, c'è un modo per spingere una funzione arbitraria alla fine della coda degli eventi? 'SetTimeout (fn, 0)' è un metodo consigliato o solo una soluzione? – incarnate