Gibt es eine Möglichkeit für mich, eine Variable zwischen zwei Web-Workern zu teilen? (Web Worker sind im Grunde Threads in Javascript)
In Sprachen wie c# haben Sie:
public static string message = "";
static void Main()
{
message = "asdf";
new Thread(mythread).Run();
}
public static void mythread()
{
Console.WriteLine(message); //outputs "asdf"
}
Ich weiß, dass ist ein schlechtes Beispiel, aber in meiner Javascript-Anwendung, ich habe einen Thread tun schwere Berechnungen, die über mehrere Threads verteilt werden können [da ich einen großen Brocken von Daten in Form eines Arrays haben. Alle Elemente des Arrays sind unabhängig voneinander. Mit anderen Worten, meine Arbeits-Threads müssen sich nicht um Sperren oder ähnliches kümmern]
Ich habe gefunden, die einzige Möglichkeit, "teilen" eine Variable zwischen zwei Threads wäre ein Getter/Setter [über Prototyping] zu erstellen und verwenden Sie dann postMessage/onmessage... obwohl dies scheint wirklich ineffizient [vor allem mit Objekten, die ich JSON für AFAIK verwenden müssen]
LocalStorage/Database wurde aus der HTML5-Spezifikation herausgenommen, weil es zu Deadlocks führen könnte, also ist das keine Option [leider]...
Die andere Möglichkeit, die ich gefunden habe, war, PHP zu verwenden, um tatsächlich eine getVariable.php und setVariable.php Seiten, die localstorage verwenden, um Ints/Strings zu speichern... wieder einmal, Objekte [die Arrays/Null enthält] müssen in JSON konvertiert werden... und dann später, JSON.parse()'d.
Soweit ich weiß, sind Javascript-Worker-Threads vollständig vom Hauptseiten-Thread isoliert [weshalb Javascript-Worker-Threads nicht auf DOM-Elemente zugreifen können
Obwohl postMessage funktioniert, ist es langsam.
0 Stimmen
Sie können sharedArrayBuffer verwenden, die beim Senden an postMessage geklont werden. Hier ist ein Artikel darüber Link