我在Elixir上有一个应用程序应该接收大量数据,然后将数据分发给n个部分。
这些部件必须并行处理,但应同时限制员工人数。作为处理结果,员工返回大量值。
主要过程在收到所有工人的结果后,将所有工具粘合在一起。
让员工通过任务是一个好主意吗?员工流程必须返回大量数据会有问题吗?
或者最好是使用GenServer建立一个员工池,并进行同步调用?
答案 0 :(得分:1)
Task.async_stream提供了一个简单的API来拆分工作,然后收集结果,同时限制并发性:
文档中的示例:
max_concurrency = System.schedulers_online * 2
stream = Task.async_stream(collection, Mod, :expensive_fun, [], max_concurrency: max_concurrency)
Enum.to_list(stream)