如何使某些东西得到支持



我正在努力理解术语lwt supported


所以假设我有一段连接数据库并编写一些数据的代码:Db.write conn data。它与lwt无关,每次写入都将花费10 sec

现在,我想使用lwt。我可以像下面这样直接编码吗?

let write_all data_list = Lwt_list.iter (Db.write conn) data_list
let _ = Lwt_main.run(write_all my_data_list)

支持my_data_list中有5数据项,是否将所有5个数据项按顺序或并行写入数据库


也可手动或http://ocsigen.org/tutorial/application,他们说

使用Lwt非常简单,不会造成麻烦,前提是您永远不会使用阻塞函数(非协作函数)。阻塞功能可能导致entre服务器挂起!

我很不明白如何使用阻塞函数对于我自己的每个函数,我可以使用Lwt.return使其成为lwt support吗?

是的,您的代码是正确的。lwt supported的原理是,代码中可能需要时间的所有内容都应该返回Lwt值。

关于Lwt_list.iter,您可以通过在iter_piter_s:之间进行选择来选择是希望并行治疗还是顺序治疗

在iter_sfl中,iter_s将对每个元素调用f在每个元素之间等待完成。关于相反,在iterpfl中,iterpall将调用f元素,然后等待所有线程终止。

关于非阻塞函数,轻量级线程的原理是它们保持运行直到达到"阻塞";合作点";,即线程可以像在sleep中那样被安全地中断或无事可做的点。

但你必须声明你进入了一个";合作点";在实际执行CCD_ 12之前。这就是为什么整个Unix库都被封装了,这样当你想做一个需要时间的操作(例如write)时,就会自动到达一个合作点。

对于您自己的功能,如果您使用Unix中的IO操作,则应该使用Lwt版本(Lwt_unix.sleep而不是Unix.sleep

相关内容

  • 没有找到相关文章

最新更新