基于 W3C Web Workers 的 Worker API。 Ringo为平行执行和抽象JVM线程提供“无共享” worker. worker有它自己的一组模块和一个独立的作用域,并在一个JVM线程中。 每个worker都有自己的单线程事件循环,其行为与浏览器或节点中的事件循环相似。worker之间的通信使用postMessage()方法和onmessage事件处理程序。 为了提高性能,Ringo将空闲worker保留在队列中,并且只有当所有现有worker都忙时才分配新的worker。worker有助于保持多线程JavaScript不受任何常见线程陷阱的影响,如同步或锁定。
一个Worker线程在 W3C Web Worker API 之后松散地建模。
moduleId参数必须是要在Worker中加载的模块的完全解析ID。为了能够使用postMessage方法将消息发送到Worker,模块必须定义(尽管不一定导出)onmessage函数。
Worker对它们自己的一组模块进行操作,因此即使模块已经加载到当前线程中,或者与当前正在执行的模块相同,也会创建该模块的新实例。 因此,每个Worker都在其私有模块环境中运行,使得并发编程比共享状态多线程更可预测。
来自Worker的回调的事件监听器可以通过将它们分配给Worker的onmessage和onerror属性来注册。
为了在Worker不再需要Worker时释放Worker的线程和其他资源,应该调用它的终止方法。
String | moduleId | the id of the module to load in the worker. |
向Worker发布消息。这会将消息排入Worker的输入队列并立即返回。 Worker线程将接收到消息并将其传递给onmessage函数。
传递给onmessage的参数是一个包含消息的data属性的对象,以及包含带postMessage和postError方法的对象的源属性,允许Worker发布消息或将错误报告给原始调用者。
如果syncCallbacks为true,则来自Worker的回调将在Worker自己的线程上运行,而不是我们的本地事件循环线程。 这允许在本地线程忙于做其他事情时同时传递回调。
请注意,与 Web Workers 规范相反,此Worker实现不需要消息的JSON序列化。
Object | data | the data to pass to the worker |
Boolean | [syncCallbacks] | flag that indicates whether callbacks from the worker should be called synchronously in the worker's own thread rather than in our own local event loop thread. |
释放Worker,将其返回到引擎的Worker池。 请注意,这不会终止Worker线程,也不会从其事件循环中移除任何当前或未来的计划任务。
这将使用给定的moduleId创建一个新的Worker,并使用消息参数调用它的postMessage函数。 从Worker返回的第一条消息或错误将用于解析Promise.
Worker在解析Promise后立即终止。
String | moduleId | the id of the module to load in the worker. |
Object | message | the message to post to the worker. |
Boolean | [syncCallbacks] | flag that indicates whether callbacks from the worker should be called synchronously in the worker's own thread rather than in our own local event loop thread. |
注册由Worker解析Promise时将调用的回调函数和errback函数。请参 Promise.then()的文档。
Function | callback | called if the promise is resolved as fulfilled |
Function | errback | called if the promise is resolved as failed |
Object | a new promise that resolves to the return value of the callback or errback when it is called. |
等待worker解析Promise.请参阅 Promise.wait()的文档。
Number | timeout | optional time in milliseconds to wait for. If timeout is undefined wait() blocks forever. |
Object | the value if the promise is resolved as fulfilled |