我有什么办法可以在两个网络工作者之间共享一个变量吗?(网络工作者基本上是 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 来存储整数/字符串......再次,必须将对象 [包括数组/null] 转换为JSON...然后是 JSON.parse()'d。
据我所知,Javascript 工作线程与主页面线程完全隔离 [这就是 Javascript 工作线程无法访问 DOM 元素的原因
尽管 postMessage 有效,但速度很慢。