【发布时间】:2012-11-28 11:14:48
【问题描述】:
可能重复:
What is the Haskell response to Node.js?
How can I watch multiple files/socket to become readable/writable in Haskell?
是否可以编写一个像 nodejs 那样以非阻塞方式执行 IO 的 Haskell 程序?
例如,我想从一个很远的数据库中获取 10 条记录,所以我想同时触发 10 个请求,当结果可用时,然后返回这个集合。 IO monad 不会有帮助,因为 monad 使用 bind 显式序列化计算。我认为你传递接下来想要的计算的延续传递风格有同样的问题,它再次序列化计算。我不想使用线程,我正在寻找另一种解决方案。这可能吗?
【问题讨论】:
-
当您说您不想使用线程时,是否可以使用通过线程实现的库,只要您不必自己管理它们?
-
你应该说出你不喜欢的线程是什么,而不仅仅是你不想使用它们。
-
(我应该指出,与 OS 线程相比,Haskell 对线程的处理非常轻量级,这也是现有 Web 服务器框架可以很好扩展的原因之一。)
-
5 秒的谷歌搜索提示我 node.js 的非阻塞操作是使用线程实现的。所以如果你想实现类似的东西,你需要线程参与。
-
@mmaroti 对,我想这可能是你的抱怨。 Haskell 线程可以扩展到数十万个范围,所以只需使用它们! (这也是我提出另一个 StackOverflow 问题的原因,它和你有同样的担忧。)
标签: node.js haskell nonblocking continuation-passing