Non. Ça veut dire littéralement ce que ça veut dire : asynchrone. Comprendre la différence entre la programmation asynchrone et la programmation basée sur les threads est essentiel pour votre réussite en tant que programmeur.
Dans un environnement traditionnel, non threadé, lorsqu'une fonction doit attendre un événement externe (tel qu'un événement réseau, un événement clavier ou souris, ou même un événement horloge), le programme doit attendre jusqu'à ce que cet événement se produise.
Dans un environnement multithread, de nombreux fils de programmation individuels sont exécutés en même temps. (Selon le nombre de processeurs et le support du système d'exploitation, cela peut être littéralement vrai, ou bien il peut s'agir d'une illusion créée par des algorithmes d'ordonnancement sophistiqués). Pour cette raison, les environnements multithreads sont difficiles et impliquent des problèmes de verrouillage de la mémoire des threads pour les empêcher de se dépasser.
Dans un environnement asychrone, un seul fil de processus fonctionne en permanence, mais il peut, pour des raisons événementielles (et c'est là l'essentiel), passer d'une fonction à une autre. Quand un événement se produit, et lorsque le processus en cours d'exécution atteint un point où il doit attendre un autre événement le noyau javascript parcourt alors sa liste d'événements et transmet le suivant, dans un ordre (formellement) indéterminé (mais probablement déterministe), au gestionnaire d'événements.
C'est la raison pour laquelle la programmation asynchrone et événementielle évite de nombreux pièges de la programmation multithread traditionnelle, tels que les problèmes de contention de la mémoire. Il peut toujours y avoir des conditions de course, car l'ordre dans lequel les événements sont traités ne dépend pas de vous, mais elles sont rares et plus faciles à gérer. D'autre part, comme le gestionnaire d'événements ne fournit pas d'événements avant que la fonction en cours d'exécution n'atteigne un point mort, certaines fonctions peuvent affamer le reste de la programmation. C'est ce qui se passe dans Node.js, par exemple, lorsque les gens font bêtement beaucoup de mathématiques lourdes dans le serveur - il vaut mieux les mettre dans un petit serveur que Node "attend" pour fournir la réponse. Node.js est un excellent petit standard téléphonique pour les événements, mais tout ce qui prend plus de 100 millisecondes devrait être géré de manière client/serveur.
Dans l'environnement du navigateur, les événements DOM sont traités comme des points d'événements automatiques (ils doivent l'être, la modification du DOM fournit beaucoup d'événements), mais même là, un Javascript mal écrit peut affamer le noyau, c'est pourquoi Firefox et Chrome ont tous deux ces gestionnaires d'interruption "Ce script a cessé de répondre".
4 votes
Non, l'asynchronicité (ism ?) le fait. pas nécessitent un parallélisme.
1 votes
Sous les couvertures il y a des fils, mais en tant que programmeur/consommateur de langage ce n'est pas le cas.
3 votes
@Jason il n'y a pas de fils sous la couverture. Ou du moins il n'y en a pas forcément.
0 votes
@Jason : il n'est pas nécessaire qu'il y ait plus d'un fil sous les couvertures non plus.
2 votes
Ce n'est pas que je ne vous crois pas, mais citez-moi s'il vous plaît. J'ai supposé que les différentes exécutions de javascript utilisaient le multithreading pour produire un comportement asynchrone.
0 votes
J'ai l'impression que le moteur js de mozilla utilise plusieurs threads, je ne peux que supposer que les autres le font aussi : developer.mozilla.org/fr/SpiderMonkey/JSAPI_Reference/JSRuntime "Un seul thread peut utiliser un JSContext à la fois. Dans une construction JS_THREADSAFE, plusieurs threads peuvent exécuter du code JavaScript simultanément dans le même JSRuntime, mais chacun de ces threads doit avoir son propre JSContext."
1 votes
Vous l'avez mal lu. Notez deux mises en garde importantes : tout d'abord, vous devez construire dans un environnement JS_THREADSAFE, et même dans ce cas, un seul thread par objet JsContext. Donc chaque instance individuelle d'un contexte javascript est toujours mono-threadée. Cela ressemble plus à un thread par manipulation d'onglet/iframe, par contexte . Pendant ce temps, le moteur V8 (le javascript derrière Chrome) est complètement monofilaire, et Node.JS en fait tout un plat : blog.mixu.net/2011/02/01/comprendre-le-nœud-js-event-loop
1 votes
La balise .NET a-t-elle été ajoutée accidentellement ? Il semble que la balise .NET ne soit pas pertinente pour cette question (je ne vois pas de contenu .NET Framework dans le message).