Ocaml 在这种情况下如何充分利用“lwt”

Ocaml 在这种情况下如何充分利用“lwt”,ocaml,ocaml-lwt,Ocaml,Ocaml Lwt,下面是我要做的: 我有一个任务列表,我需要每1小时运行一次 所有这些任务都是相似的。例如,对于一个任务,我需要使用http协议从服务器下载一些数据,需要5-8秒,然后对数据进行计算需要1-5秒 我想我可以使用lwt来实现这些,但无法找到提高效率的最佳方法 对于任务计划部分,我可以这样做: 这些问题来自实际的任务部分 因此,任务涉及http下载和计算 http下载部分需要等待5到8秒。如果我真的一个接一个地执行每个任务,那么它会浪费带宽,当然,我希望所有任务的下载过程是并行的。那么我应该把这个下载

下面是我要做的:

我有一个任务列表,我需要每1小时运行一次

所有这些任务都是相似的。例如,对于一个任务,我需要使用http协议从服务器下载一些数据,需要5-8秒,然后对数据进行计算需要1-5秒

我想我可以使用lwt来实现这些,但无法找到提高效率的最佳方法

对于任务计划部分,我可以这样做:

这些问题来自实际的任务部分

因此,任务涉及http下载和计算

http下载部分需要等待5到8秒。如果我真的一个接一个地执行每个任务,那么它会浪费带宽,当然,我希望所有任务的下载过程是并行的。那么我应该把这个下载部分放到lwt上吗?lwt会并行处理所有下载吗

根据代码,我应该这样做吗

那么,通过上面的代码,是否所有任务都将并行执行,至少对于http下载部分是这样

对于计算部分,是否按顺序执行所有计算


此外,有谁能简单描述一下lwt的机理吗?在内部,轻量级线程的逻辑是什么?为什么它可以并行处理IO?

要使用lwt进行并行计算,您可以检查,尤其是iter\p

val iter_p : ('a -> unit Lwt.t) -> 'a list -> unit Lwt.t
iter_p f l在l的每个元素上调用函数f,然后等待所有线程终止。出于您的目的,它看起来像:

let do_tasks tasks = List.iter_p do_task tasks

假设任务是一个任务列表。

要使用lwt进行并行计算,可以检查,尤其是iter\p

val iter_p : ('a -> unit Lwt.t) -> 'a list -> unit Lwt.t
iter_p f l在l的每个元素上调用函数f,然后等待所有线程终止。出于您的目的,它看起来像:

let do_tasks tasks = List.iter_p do_task tasks

假设任务是一个任务列表。

让我来回答您关于lwt和轻量级线程的问题:和。与我在另一个线程中的评论中的链接相同。@lukstafi:您应该将此作为答案而不是评论添加。@gasche-:-@lukstafi:当然,StackOverflow希望您在StackOverflow中手动打印Jérôme的文章,让我来回答你关于lwt和轻量级线程的问题:和。与我在另一个线程中的评论中的链接相同。@lukstafi:您应该将此作为答案而不是评论添加。@gasche-:-@lukstafi:当然,StackOverflow希望您在StackOverflow中手动打印Jérôme的文章,这样他们就能获得更多的谷歌点击率。我需要让任务得到lwt支持吗?我不确定我是否理解你们所说的lwt支持是什么意思?一项任务可以是你想要的任何类型,看看iter_p的“A”列表。唯一必要的是,如果任务不自然返回Lwt,只需将Lwt.return放在末尾。我需要启用任务以支持Lwt吗?我不确定我是否理解您所说的支持Lwt的意思?一项任务可以是你想要的任何类型,看看iter_p的“A”列表。唯一必要的是,如果do_任务不能自然返回Lwt,只需将Lwt.return放在末尾