我有什么方法可以在两个网络工作者之间共享变量吗?(Web worker基本上是Javascript中的线程)
在像c#这样的语言中你有:
public static string message = "";
static void Main()
{
message = "asdf";
new Thread(mythread).Run();
}
public static void mythread()
{
Console.WriteLine(message); //outputs "asdf"
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个糟糕的例子,但在我的Javascript应用程序中,我有一个线程进行大量计算,可以分布在多个线程中[因为我有一大块数据以数组的形式.数组的所有元素都是相互独立的.换句话说,我的工作线程不必关心锁定或类似的东西]
我发现在两个线程之间"共享"变量的唯一方法是创建一个Getter/setter [通过原型设计],然后使用postMessage/onmessage ...虽然这看起来效率很低[特别是对象,我有使用JSON进行AFAIK]
LocalStorage/Database已经从HTML5规范中删除,因为它可能导致死锁,所以这不是一个选择[遗憾] ......
我发现的另一种可能性是使用PHP实际上有一个getVariable.php和setVariable.php页面,它们使用localstorage来存储整数/字符串...再一次,Objects [包括arrays/null]必须转换为JSON ......然后是JSON.parse()'d.
据我所知,Javascript工作线程与主页面线程完全隔离[这就是Javascript工作线程无法访问DOM元素的原因
虽然postMessage有效但速度很慢.
谢谢!