Question

Bonjour,

Je suis en train d'étudier le javascript été, nodejs. Et je ne comprends pas comment les problèmes de concurrence sont évités en javascript.

Disons que je travaille sur un objet

var bigObject = new BigObject();

et j'ai un setTimer(function(){ workOnBigOjbect...} ) qui ne fonctionnent aussi sur bigOjbect.

Si j'ai disque IO étant écrit en bigObject, et un objet de la minuterie de travail sur bigObject, et le code régulièrement lecture de bigObject, comment les problèmes évités simultanéité?

Dans une langue régulière, je voudrais utiliser un mutex ou file d'attente / modèle de commande thread-safe. Je ne vois pas aussi beaucoup de discussions sur les conditions de course pour javascript.

Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Le point entier de Node.js est qu'il est évènementielle. Tout le code est exécuté dans les gestionnaires d'événements dans un seul fil. Il n'y a pas de problèmes de concurrence, car le code ne fonctionne pas en même temps. L'inconvénient est que chaque gestionnaire d'événements doit quitter rapidement car il bloque les autres événements.

Dans votre exemple, le code démarre le disque IO et quitter immédiatement. L'infrastructure Node.js informera le programme que l'opération IO a été achevée en exécutant un gestionnaire d'événements. L'événement de minuterie sera appelée avant ou après l'événement IO, mais jamais en même temps.

Autres conseils

Javascript est mono-thread. Si le temps arrive lorsque votre fonction est censé exécuter (basé sur la façon dont vous avez appelé SetTimer), et le code parent est toujours en cours d'exécution, la fonction ne sera pas exécuté tant que le code parent a terminé.

Il n'y a qu'un seul thread; voir: Node.js sur les machines multi-core

Je spécule que ce soit parce que les discussions multiples ne sont pas pris en charge dans le moteur JavaScript V8 sous-jacente depuis généralement JavaScript est exécuté dans un navigateur (où, dans un cas de fenêtres, il n'y a qu'un seul thread d'interface utilisateur) et ne prend pas en charge plusieurs threads.

Il y a cette chose est en javascript appelé Pourquoi aucun outil de contrôle d'accès concurrentiel en javascript pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top