chi*_*hin 1 javascript multithreading asynchronous node.js opa
Node.js本身支持工作线程和子进程的创建.那些使用过Node.js的人可能熟悉流控制库,如Async.js或Step.
既然Opa在Node.js堆栈上运行,有没有办法将Async.js库用作javascript模块?
是否有任何Opa语言的绑定允许线程或某种异步流控制?我怀疑没有,但我很好奇在Opa中实现线程或异步流量控制的可能选择是什么?
*现在我知道我可以用非Opa语言将我的工作转移到另一个脚本,但这是我唯一的选择吗?
提前谢谢,因为我是Opa的新手并且正在努力了解它的功能!
小智 5
Opa编译器自动将您的代码重写为异步Javascript代码.
它是Opa的一个特性,你不应该处理线程管理,它默认由编译器处理.
此外,Opa提供了一些并发原语来访问其控制流.
@callcc : continuation('a) -> 'a
@spawn : 'a -> Cps.future('a)
@wait : Cps.future('a) -> 'a
Run Code Online (Sandbox Code Playgroud)
哪里@callcc允许访问当前的继续.这里是一个使用示例,从异步函数构建一个同步函数:
function ('a -> 'b) to_sync(('a, ('b -> void) -> void) fasync){
function (a){
@callcc(function(k){
fasync(a, Continuation.return(k, _))
})
}
}
Run Code Online (Sandbox Code Playgroud)
并@spawn在另一个'线程'上启动一个值的计算.并@wait用于获得衍生的价值.作为伪示例:
function example(){
future = @spawn(
x = fibo(30);
jlog("End of spawn computation {x}");
{result : x}
)
// ...
jlog("do something before wait")
result = @wait(future).result
jlog("the result is [resulr}")
}
//Output of example is :
// do something before wait
// the result is 832040
Run Code Online (Sandbox Code Playgroud)
您还可以使用该模块访问调度原语Scheduler
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |