2010-10-27 5 views
1

Comment setTimeout dans Javascript fonctionne au niveau bas? Existe-t-il un réveil matériel? Ou l'interprète (à travers le système) demande simplement périodiquement quelle heure est maintenant?Comment fonctionne setTimeout

Répondre

2

Tout ce qui est spécifié est les effets au niveau du langage. Il n'y a aucune exigence que cela fonctionne d'une manière spécifique à un niveau bas. Cela nécessiterait une politique intrusive sur les fonctions qui doivent exister dans la langue de votre choix avant de pouvoir créer un interpréteur Javascript. En règle générale, la plupart des systèmes d'exploitation ont un temporisateur système qui exécute X fois par seconde, et un interpréteur mettra en place un temporisateur pour déclencher un événement ou envoyer un signal après tant de ticks, ou exécuter un thread séparé qui dort jusqu'à il est temps de traiter un timeout. À ce moment-là, l'interpréteur va configurer les choses de sorte que le gestionnaire d'événements soit la prochaine chose à exécuter. Mais vous ne devez pas compter sur un comportement particulier, car il s'agit d'un détail d'implémentation (et peut échouer de manière spectaculaire si vous n'exécutez pas votre code dans un navigateur pour lequel vous avez développé).

+0

ok, mais comment les minuteurs fonctionnent dans le système d'exploitation? Comment le système d'exploitation sait-il quand faire la prochaine minuterie? Comment l'OS sait-il quand déclencher l'événement? Ma question est générale et pas vraiment liée à une langue particulière. La question est plus sur l'architecture du processeur, je pense. – Dan

+0

La plupart des machines ont un mécanisme pour interrompre le processeur X fois par seconde. Le système d'exploitation met les choses en place pour répondre à ces interruptions et incrémenter un compteur, et vérifie généralement s'il y a un processus/thread qui attendait que le compteur atteigne une valeur donnée (et le redémarre si c'est le cas). Pour que cela ait plus de sens, vous devez comprendre les interruptions matérielles. – cHao

+0

Merci, les choses sont devenues plus claires pour moi. – Dan