gpt4 book ai didi

multithreading - 你如何调节 Erlang 中的并发/相对进程性能?

转载 作者:行者123 更新时间:2023-12-04 06:44:28 25 4
gpt4 key购买 nike

假设我必须从一个包含许多大型 XML 文件的目录中读取数据,我必须对其进行解析并通过网络将它们发送到某个服务,然后再次将响应写入磁盘。

如果是 Java 或 C++ 等,我可能会做这样的事情(希望这是有道理的):

(File read & xml parsing process) -> bounded-queue -> (sender process) -> service

service -> bounded-queue -> (process to parse result and write to disk)

然后我会为每个进程分配任何合适数量的线程。这样我可以将每个进程的并发限制在最佳值,并且有界队列将确保不会出现内存短缺等。

在 Erlang 中编码时我应该怎么做?我想我可以在一个函数中实现整个流程,然后迭代目录并尽可能快地产生这些“开始到结束”的过程。这听起来不太理想,因为如果解析 XML 比读取文件等花费的时间更长,那么应用程序。可能会因为一次在内存中存储许多 XML 文档等而导致内存不足,并且您无法将并发性保持在最佳水平。例如。如果“服务”在并发为 4 时效率最高,那么以巨大的并发命中它会非常低效。

erlang程序员应该如何处理这种情况? IE。固定线程池和有界队列的 erlang 替代品是什么?

最佳答案

您绝对可以在 Erlang 中运行自己的进程池,但这是一种糟糕的内存使用方式,因为它没有考虑正在读取的 XML 数据的大小(或进程使用的总内存)。

我建议按照您的建议在功能库中实现整个工作流程,并生成执行此工作流程的流程。添加内存使用检查,查看要读入的数据大小和可用内存(提示:使用 memsup)。

关于multithreading - 你如何调节 Erlang 中的并发/相对进程性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com