【发布时间】:2011-09-09 20:20:59
【问题描述】:
假设我必须从一个包含许多大型 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 替代品是什么?
【问题讨论】:
标签: multithreading performance concurrency erlang