Ho letto questo articolo http://ejohn.org/blog/how-javascript-timers-work/ e come setTimeout
e setInterval
e di altri compiti asincroni, come scatto del tasto mi confuso un po '.SetTimeout o setInterval usano il thread per sparare?
So che JS è un singolo thread, ovvero AFAIK, tutte le funzioni di callback (a.k.a. gestori di eventi) verranno accodate ed eseguite in ordine. Tuttavia, guardare l'immagine qui sotto che ho preso da questo articolo, linkato sopra:
Ogni blocco rappresenta un certo lavoro, e - a circa 10ms - il timer viene licenziato. So che la sua funzione di callback è messa in coda per l'esecuzione successiva, ma come mai l'evento può essere richiamato mentre qualcosa viene già eseguito?
Forse perché setTimeout()
inizia a utilizzare un thread separato per contare il tempo internamente e fuoco il suo evento di completamento?
prega di notare che io non sto parlando di sua esecuzione richiamata qui; piuttosto, sto cercando di capire come setTimeout
può contare il tempo e si accende il suo completamento. So che la sua callback verrà chiamata non prima che i suoi dati parametri di tempo, ma forse più tardi, ma questo è perché il suo richiamo si accoda al secondo momento, quando il runtime trova un po 'di tempo per verificare se c'è qualcosa da eseguire nella coda.
simile a questa domanda, come mai i browser accetta nuova clicca per essere registrato, mentre - diciamo - un ciclo sta lavorando dietro le quinte al momento di utente clicca?
Se dici browser mantengono le discussioni diverse per cose diverse, allora possiamo chiamare JS nei browser single threaded?
Inoltre, controllare le risposte a questa domanda: http://stackoverflow.com/questions/1663125/is-javascript-multithreaded tua domanda aggiunge un elemento interessante per la conversazione. Non so se è un duplicato anche se la domanda, di per sé, è sostanzialmente diversa – Thomas