模块 ringo/concurrent
用于处理多个同时运行的线程的实用程序。
Semaphore (permits)
计数信号量,可用于协调和同步同步线程之间的协作。信号量保存许多许可证。
请注意,Worker 事件通常在本地事件循环的单线程中运行,因此不需要由信号量提供同步。唯一的情况是,如果您想为 worker 使用信号量,则将 syncCallbacks 标志设置为 Worker.postMessage() 的第二个参数,因为这会导致 worker 的回调在其自己的线程中运行,而不是在事件循环中运行。
为了使用信号量同步线程,线程可以使用 wait 和 tryWait 方法请求一个或多个许可。如果所需的许可证数量可用,它们将从信号量中的许可证数量中减去,并且方法立即返回。
如果请求的许可数量不可用,wait 和 tryWait 方法会阻塞,直到另一个线程使用 signal 方法添加所需的许可证,或者在 tryWait 的情况下,指定的超时将到期。
Parameters
Number | permits | the number of initial permits, defaults to 0 |
Semaphore.prototype. signal (permits)
向信号量添加一个或多个许可证。
Parameters
Number | permits | the number of permits to give, defaults to 1 |
Semaphore.prototype. tryWait (timeout, permits)
在给定的时间范围内等待一个或多个许可证。如果在超时过去之前可以获取请求的许可证,则返回 true。
Parameters
Number | timeout | The span of time to wait, in milliseconds |
Number | permits | the number of permits to wait for, defaults to 1 |
Returns
true if the requested permits could be acquired, false if the timeout elapsed |
Semaphore.prototype. wait (permits)
等待一个或多个许可证。
Parameters
Number | permits | the number of permits to wait for, defaults to 1 |