Ben*_*eby 8 javascript asynchronous scala web-worker scala.js
请考虑一个Scala.js类,它包含一个名为xArr的大型JavaScript 类型数组.
这个过程被称为 P(xArr)消耗xArr作为输入,但需要很长的时间才能完成.为了避免脚本超时警告,p(xArr)在Web Worker中运行.
回想一下主线程和Web Worker线程之间通信的这些限制:
由于xArr的大小,将其副本发送到工作线程将导致严重的内存成本,但由于p(xArr)的运行时间,它无法在主线程中运行.
幸运的是,类型数组实现转换接口,因此,以节省计算和存储器资源,所述程序调用P(xArr)通过转移xArr到调用WebWorker P(xArr)然后传送xArr回主线程.
不幸的是,主线程中的其他异步方法必须访问xArr,它可能在调用时传输到工作者的作用域.
什么Scala语言功能可以控制对xArr的访问,以便方法调用在主线程拥有xArr时立即执行,但等待它在工作者拥有xArr时返回范围?
换句话说:你如何处理一个连续在定义和未定义之间交替的类变量?
你会建议锁吗?承诺/回拨队列?你会以完全不同的方式解决问题吗?如果是这样,怎么样?
请记住,这是一个Scala.js库,因此我们必须取消对JVM特定功能的限制.
我理解你在这里真正的痛苦。这曾经与SharedArrayBuffer一起使用,但目前在 Chrome 中被禁用。遗憾的是,共享内存没有其他选择:
请注意,为了响应 Spectre,SharedArrayBuffer 在 2018 年 1 月 5 日在所有主要浏览器中默认被禁用。
计划SharedArrayBuffer在完成适当的安全审核后重新添加。我想我们得等一下。
如果您在 Node 中运行代码 - 这会很困难,但也是可能的。