Mi stavo chiedendo se qualcuno sa come implementare setTimeout in node.js. Credo di aver letto da qualche parte che questo non fa parte del V8. Ho cercato rapidamente di trovare l'implementazione, ma non sono riuscito a trovarla nella fonte (BIG). Ad esempio, ho trovato questo file timers.js, che quindi ad esempio collega a timer_wrap.cc. Ma questi file non rispondono completamente a tutte le mie domande.Come viene implementato setTimeout in node.js
- L'implementazione di V8 è
setTimeout
? Immagino anche dalla fonte che la risposta sia no. Come viene implementato
setTimeout
? javascript o nativo o combinazione di entrambi? Da timers.js Presumo qualcosa lungo la linea di entrambi:var Timer = process.binding('timer_wrap').Timer;`
Quando si aggiungono più timer (setTimeout) come fa sapere node.js cui eseguire prima? Aggiunge tutti i timer a una raccolta (ordinata)? Se è ordinato, trovare il timeout che deve essere eseguito è O (1) e O (log n) per l'inserimento? Ma poi di nuovo in timers.js li vedo usare una lista collegata?
- Ma poi di nuovo aggiungere un sacco di timer non è un problema?
Durante l'esecuzione di questo script:
var x = new Array(1000), len = x.length; /** * Returns a random integer between min and max * Using Math.round() will give you a non-uniform distribution! */ function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } var y = 0; for (var i = 0; i < len; i++) { var randomTimeout = getRandomInt(1000, 10000); console.log(i + ', ' + randomTimeout + ', ' + ++y); setTimeout(function() { console.log(arguments); }, randomTimeout, randomTimeout, y); }
si ottiene un po 'di utilizzo della CPU, ma non più di tanto?
- Mi chiedo se implementare tutte queste richiamate una alla volta in una lista ordinata se otterrò prestazioni migliori?
in questo esempio i timeout sono sempre gli stessi? 60 secondi? – Alfred
Quindi vuoi che succeda un numero di cose in 60 secondi, e stai cercando di capire se raggruppare tutte queste cose insieme o creare un setTimeout per ognuna separatamente? –
no spiacenti. Quel documento che hai collegato ha 60 secondi di ritardo. I miei ritardi possono essere qualsiasi cosa e molto! – Alfred