Ne programmation asynchrone signifie le multi-threading?
permet de parler de code JavaScript qui a setInterval
méthodes de chaque 2
sec.
J'ai aussi un onblur
événement d'animation pour un certain contrôle.
Dans un cas où onblur
se produit (+ animation), je pourrais obtenir le setInterval
fonction.
Donc ma question est:
Ne programmation Asynchrone signifie le multi-threading? (de toute façon?)
Je sais que Javascript n'est pas un multi-threading langue.
Alors...?
- Non, l'asynchronicité (ism?) ne nécessite pas de parallélisme.
- sous le capot il y a des threads, mais en tant que programmeur/langue consommateur, il n'est pas.
- il n'y a pas threads sous le capot. Ou au moins, il n'a pas à être.
- il n'a pas à être de plus d'un fil sous le couvre.
- non pas que je ne vous crois pas, mais, citer s'il vous plaît. j'ai supposé que les différents javascript moteurs d'exécution utilisés multithreading pour produire un comportement asynchrone.
- suis-je la lecture de ce mauvais pas, il semble mozilla js moteur utilise plusieurs threads, je ne peux que supposer que les autres à faire de même: developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSRuntime "un Seul thread peut utiliser un JSContext à la fois. Dans un JS_THREADSAFE construire, plusieurs threads peuvent s'exécuter du code JavaScript simultanément dans le même JSRuntime, mais chaque thread doit avoir son propre JSContext."
- Vous êtes la lecture de ce mal. Remarque les deux mises en garde importantes: tout d'abord, vous devez être la construction est un JS_THREADSAFE de l'environnement, et même alors, seulement un thread par JsContext objet. Donc, chaque instance d'un contexte javascript est encore célibataires-thread. Qui ressemble plus à un thread par onglet/iframe de manutention, de par le contexte. Pendant ce temps, le moteur V8 (le javascript derrière Chrome) est complètement single-threaded, et Node.JS fait une grosse affaire à ce sujet: blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop
- A l' .NET ajouté le tag accidentellement? Il semble que l' .NET balise n'est pas pertinent pour cette question (je ne vois pas tout .NET Framework contenu dans le post).
Vous devez vous connecter pour publier un commentaire.
Pas. Il signifie littéralement ce qu'il veut dire-asynchrone. La compréhension de la différence entre la programmation asynchrone et basé sur le thread de programmation est essentiel à votre succès en tant que programmeur.
Dans un traditionnel, non filetée de l'environnement, lorsqu'une fonction doit attendre un événement externe (tel qu'un réseau d'événement, d'un clavier ou de la souris de l'événement, ou même un événement horloge), le programme doit attendre jusqu'à ce que l'événement se produit.
Dans un environnement multi-thread, de nombreux threads individuels de programmation sont en cours d'exécution en même temps. (En fonction du nombre de Processeurs et le soutien du système d'exploitation, cela peut être littéralement vrai, ou c'est peut être une illusion créée par les sophistiqué algorithmes d'ordonnancement). Pour cette raison, les environnements multi-threads sont complexes et impliquent des questions de threads de verrouillage des uns et des autres de la mémoire pour éviter de saturer l'un de l'autre.
Dans un asychronous de l'environnement, un processus unique thread fonctionne tout le temps, mais il peut, pour event-driven raisons (et c'est la clé), passer d'une fonction à l'autre. Lorsqu'un événement se produit, et lorsque le processus en cours d'exécution atteint un point où il doit attendre qu'un autre événement, le javascript de base analyse ensuite la liste des événements et offre la suivante, dans un (officiellement) une durée indéterminée (mais probablement déterministe) de l'ordre, pour le gestionnaire d'événement.
Pour cette raison, l'événementiel, la programmation asynchrone permet d'éviter de nombreux écueils traditionnels, multi-thread de programmation, telles que la mémoire les problèmes de contention. Il reste peut-être des conditions de course, que l'ordre dans lequel les événements sont gérés n'est pas à vous, mais ils sont rares et plus facile à gérer. D'autre part, parce que le gestionnaire d'événement à ne pas offrir des événements jusqu'à ce que la fonction courante hits inactif spot, certaines fonctions peuvent mourir de faim le reste de la programmation. Ce qui se passe dans Node.js par exemple, quand les gens bêtement de faire beaucoup de lourd de mathématiques dans le serveur-- qui est le plus poussé dans un petit serveur qui le noeud alors "en attente" pour livrer la réponse. Node.js est un peu grande centrale pour les événements, mais tout ce qui prend plus de 100 millisecondes doivent être manipulés dans un contexte client/serveur façon.
Dans le navigateur de l'environnement, les événements DOM sont traités comme automatique des points d'événement (ils doivent être, de modifier le DOM offre beaucoup d'événements), mais même là, mal écrits Javascript peut mourir de faim le noyau, qui est pourquoi Firefox et Chrome ont ces "Ce script est a cessé de répondre" gestionnaires d'interruption.
Un seul thread boucle d'événement est un bon exemple d'être asynchrone dans un seul thread langue.
Ici, le concept est que vous attachez
doLater
les gestionnaires de rappel à laeventLoop
. Puis leeventLoop
est juste unwhile(true)
qui vérifie si le timestamp spécifique pour chaquedoLater
gestionnaire est rencontré, et si donc il appelle le gestionnaire.Pour ceux que cela intéresse, voici un naïf (et horriblement inefficace jouet) la mise en œuvre d'un à thread unique boucle d'événements en JavaScript
Cela signifie que, sans aucun type de système d'exploitation planificateur de threads d'accès de votre thread unique, votre forcé d'attente active de la
doLater
rappels.Si vous avez un
sleep
appel, vous pourriez fairesleep
jusqu'à la prochainedoLater
gestionnaire qui est plus efficace alors une longue attente depuis vous deschedule votre seul fil et laissez le système d'exploitation de faire d'autres choses.Seulement dans le sens qu'il exécute le code au hasard et les risques des conditions de course. Vous n'aurez pas les avantages de performance à l'aide des délais d'attente et des intervalles.
Cependant, HTML5 web workers ne permettre une véritable multithreading dans le navigateur:
http://www.html5rocks.com/en/tutorials/workers/basics/
Si il y a un rappel, quelque chose a l'appeler. Les unités d'exécution sont les threads & donc, oui, un autre thread appelle la fonction de rappel, soit directement, soit par la mise en queue quelques asynchrone appel de procédure à l'initiateur du fil.