假设我需要读取一个包含许多大型XML文件的目录,并对其进行解析,接着通过网络将它们发送到某个服务,最后再将响应写入磁盘。如果是Java或C++等语言,可能会像这样做(希望这有意义):
然后,我会为每个进程分配适当数量的线程。这样,我可以将每个进程的并发限制在其最佳值,并且有界队列将确保不会出现内存短缺等问题。
但是,在编写Erlang代码时应该怎么做呢?我想我可以在一个函数中实现整个流程,然后迭代目录并尽可能快地生成这些“从头到尾”的进程。虽然这听起来不太理想,因为如果XML解析时间比读取文件时间长等,则应用程序可能会因为一次性在内存中拥有许多XML文档而导致内存短缺等问题,而且您无法保持并发处于最佳水平。例如,如果“服务”在并发为4时最有效,则使用巨大的并发处理它将非常低效。
那么,Erlang程序员应该如何处理这种情况?即什么是Erlang中固定线程池和有界队列的替代品?
(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程序员应该如何处理这种情况?即什么是Erlang中固定线程池和有界队列的替代品?