Esiste un modo per condividere una variabile tra due web worker? (Lavoratori Web sono fondamentalmente thread in Javascript)Condivisione delle variabili tra i web worker? [variabili globali?]
In linguaggi come C# si ha:
public static string message = "";
static void Main()
{
message = "asdf";
new Thread(mythread).Run();
}
public static void mythread()
{
Console.WriteLine(message); //outputs "asdf"
}
So che questo è un cattivo esempio, ma nella mia applicazione Javascript, ho un filo di effettuare i calcoli pesanti che possono essere si sviluppa su più thread [poiché ho una grande quantità di dati sotto forma di array. Tutti gli elementi dell'array sono indipendenti l'uno dall'altro. In altre parole, i miei thread di lavoro non devono preoccuparsi di blocco o qualcosa di simile]
ho trovato l'unico modo per "condividere" una variabile tra due thread sarebbe quello di creare un getter/setter [via prototipazione] e quindi utilizzare postMessage/onmessage ... anche se questo sembra davvero inefficiente [specialmente con gli oggetti, che devo usare JSON per AFAIK]
LocalStorage/Database è stato eliminato dalle specifiche HTML5 perché potrebbe causare deadlock, quindi non è un'opzione [purtroppo] ...
L'altra possibilità che ho trovato è stata quella di utilizzare PHP per avere effettivamente una pagina getVariable.php e setVariable.php, che usano localstorage per memorizzare i nts/stringhe ... ancora una volta, gli oggetti [che include le matrici/null] devono essere convertiti in JSON ... e successivamente, JSON.parse() 'd.
Per quanto ne so, Javascript thread di lavoro sono totalmente isolati dal principale page thread [che è il motivo per cui Javascript thread di lavoro non possono accedere a elementi DOM
Anche se funziona postMessage, è lento.
Grazie!
Se ci fosse un modo per condividere i valori non "atomica" tra i lavoratori, la semantica di quei valori sarebbe impossibile da utilizzare con risultati prevedibili <-. Assolutamente sbagliato in ogni modo. – Tony
Cura da elaborare? –
Algoritmo di panificazione di Lamport. Dijkstra ha protetto la logica di comando. Tutto è specifico per la prevedibilità non deterministica. – Tony