Y a-t-il un moyen pour moi de partager une variable entre deux travailleurs Web? (Les travailleurs Web sont fondamentalement des threads dans JavaScript)
dans des langues comme c # vous avez: p>
public static string message = ""; static void Main() { message = "asdf"; new Thread(mythread).Run(); } public static void mythread() { Console.WriteLine(message); //outputs "asdf" }
4 Réponses :
Non, mais vous pouvez envoyer des messages aux travailleurs Web pouvant être des matrices, des objets, des chiffres, des chaînes, des booléens et des imagédia ou une combinaison de ceux-ci. Les travailleurs Web peuvent également envoyer des messages. P>
Les travailleurs Web sont délibérément partagés - rien - tout dans un travailleur est complètement caché d'autres travailleurs et des pages du navigateur. S'il y avait un moyen de partager des valeurs non «atomiques» entre les travailleurs, la sémantique de ces valeurs serait presque impossible à utiliser avec des résultats prévisibles. Maintenant, un pourrait EM> introduire des serrures comme moyen d'utiliser de telles valeurs, dans une certaine mesure, vous acquérez la serrure, examinez et peut-être modifier la valeur, puis relâchez la serrure - mais les serrures sont très difficiles. À utiliser, et puisque le mode d'échec habituel est une impasse, vous seriez en mesure de "brique" le navigateur assez facilement. Ce n'est pas bon pour les développeurs ou les utilisateurs ( surtout em> lorsque vous considérez que l'environnement Web est tellement préalable à l'expérimentation des non-programmeurs qui n'ont même jamais entendu parler de threads, de serrures ou de messages), donc L'alternative n'est pas partagée entre les travailleurs ou les pages du navigateur. Vous pouvez passer des messages (que l'on peut penser comme étant sérialisé "sur le fil" au travailleur, qui crée ensuite sa propre copie de la valeur d'origine en fonction des informations sérialisées) sans avoir à remédier à ces problèmes. P >
Vraiment, le passage du message est la bonne façon de soutenir le parallélisme sans laisser les problèmes de concurrence complètement incontrôlables. Orchestrer correctement vos transferts de messages et vous devriez avoir tout le plus grand pouvoir que si vous pouviez partager l'état. Vous ne voulez vraiment pas l'alternative que vous pensez que vous voulez. P>
S'il y avait un moyen de partager des valeurs non «atomiques» entre les travailleurs, la sémantique de ces valeurs serait impossible à utiliser avec des résultats prévisibles. <- Absolument faux à tous égards.
Algorithme de boulangerie de la Lamport. Logique de commandement gardée de Dijkstra. Tout est spécifiquement pour la prévisibilité non déterministe.
Bien, "presque impossible", alors. Il reste vrai que le partage de données non simples est très facile de se tromper, et pour cette raison que vous ne pouvez pas faire quelque chose avec les travailleurs du Web.
Ce que vous essayez vraiment de dire, c'est que l'expérience et la connaissance du domaine de la plupart des programmeurs dans cet espace entraîneraient des résultats presque imprévisibles. En programmation, tout le pouvoir vient de la responsabilité; ou des modèles pour atténuer le risque. : p
Sûr. Compte tenu de la poubelle totale qui pollue une grande partie du code sur le Web, je pense que je suis justifiée dans mon scepticisme à l'égard des capacités de développeurs Web d'utiliser une sorte de chose correctement.
En fait, vous pouvez partager des données à l'aide de API de messagerie de canaux.
J'ai récemment lu sur (mais n'a pas utilisé), Travailleurs partagés . Selon Partagez le travail! Opera est livré avec le support SharedWorker , le support est uniquement dans les nouveaux navigateurs (Opera 10.6, Chrome 5, Safari 5). P>
Il existe deux options pour partager des données entre travailleurs dédiés: p>
L'interface SharedWorker représente un type de travailleur spécifique qui
peut être accessible à partir de plusieurs contextes de navigation, tels que plusieurs
Windows, iframes ou même travailleurs. P>
blockQuote>
accumulant un ouvrier partagé dans un travailleur dédié < / p>
L'API de messagerie de la chaîne permet deux scripts distincts en cours d'exécution
différents contextes de navigation attachés au même document (par exemple, deux
Iframes, ou le document principal et un iframe, deux documents via un
SharedWorker, ou deux travailleurs) pour communiquer directement, en passant
messages entre les uns entre autres par des canaux à deux voies (ou des tuyaux) avec
un port à chaque extrémité. p>
blockQuote>
Comment faire appel à travailleur partagé du webdeur? < / a> p>
Les travailleurs partagés sont des travailleurs pouvant être liés à un réseau de messages, au lieu de l'arbre de messagerie simple de travailleurs dévoués. Cependant, le principe de base des travailleurs est vrai: vous ne pouvez rien partager entre les travailleurs, ne transmettez que des messages.
Mais la compatibilité: / développeur.mozilla.org/en-us / Docs / Web / API / ...
Vous pouvez utiliser Sharedarraybuffer qui sera cloné lors de l'envoi à PostMessage. Voici un article sur It Lien