Могу ли я поделиться переменной между двумя веб-работниками? (Веб-работники в основном являются потоками в Javascript)
На таких языках, как c # у вас есть:
public static string message = "";
static void Main()
{
message = "asdf";
new Thread(mythread).Run();
}
public static void mythread()
{
Console.WriteLine(message); //outputs "asdf"
}
Я знаю, что это плохой пример, но в моем приложении Javascript у меня есть поток, выполняющий тяжелые вычисления, которые могут быть распределены по нескольким потокам [поскольку у меня большой кусок данных в виде массива. Все элементы массива не зависят друг от друга. Другими словами, мои рабочие потоки не должны заботиться о блокировке или о чем-либо подобном]
Я обнаружил, что единственный способ «поделиться» переменной между двумя потоками - это создать Getter / setter [через прототипирование], а затем использовать postMessage / onmessage ... хотя это кажется действительно неэффективным [особенно с объектами, который я должен использовать JSON для AFAIK]
LocalStorage / Database был исключен из спецификации HTML5, поскольку это может привести к взаимоблокировкам, поэтому это не вариант [к сожалению] ...
Другой возможностью, которую я нашел, было использование PHP, чтобы на самом деле иметь страницы getVariable.php и setVariable.php, которые используют localstorage для хранения ints / strings ... еще раз, Objects [который включает в себя массивы / null] должны быть преобразован в JSON ... а затем, JSON.parse () 'd.
Насколько мне известно, рабочие потоки Javascript полностью изолированы от потока главной страницы [поэтому рабочие потоки Javascript не могут получить доступ к элементам DOM
Хотя postMessage работает, он работает медленно.