10
votes

Partage de variables entre les travailleurs du Web? [variables globales?]

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"
}


1 commentaires

Vous pouvez utiliser Sharedarraybuffer qui sera cloné lors de l'envoi à PostMessage. Voici un article sur It Lien


4 Réponses :


5
votes

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.


0 commentaires

15
votes

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 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 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.

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.


6 commentaires

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.



2
votes

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).


0 commentaires

5
votes

Il existe deux options pour partager des données entre travailleurs dédiés:

1. travailleurs partagés

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.

accumulant un ouvrier partagé dans un travailleur dédié < / p>

2. API de messagerie de canal

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é.

Comment faire appel à travailleur partagé du webdeur? < / a>