3

我编写了一个简单的 perl 脚本,通过 Apache 上的 fastCGI 运行。应用程序加载一组 XML 数据文件,这些文件用于根据传入请求的查询参数查找值。据我了解,如果我想增加我的应用程序可以处理的并发请求数量,我需要允许 fastCGI 生成多个进程。这些进程中的每一个都必须在内存中保存 XML 数据的副本吗?有没有办法进行设置,以便我可以在内存中加载一个 XML 数据的副本,同时增加处理并发请求的能力?

4

2 回答 2

9

正如 pilcrow 正确回答的那样,FastCGI 没有提供在进程之间共享数据的特殊方法,并列出了减少内存使用的传统方法。

另一种可能性是让一个持久的、非 FastCGI 进程读取 XML 文件并充当 FastCGI 进程的数据服务器。这样做的效率取决于查询的复杂程度以及需要传入和传出多少数据,但它允许数据的单个副本保留在内存中。

于 2010-05-12T05:59:33.177 回答
8

内存在不同的 FastCGI 进程之间共享,就像在普通的独立进程之间一样,也就是说,就我们的目的而言,数据不是共享的。

(FastCGI 让单个进程串行处理多个请求,避免了重新初始化、重新读取配置和 XML 数据的需要,例如,在该进程第一次处理之后的每个请求。)

从好的方面来说,任何可以减少单独进程之间的 XML 内存占用的技术都应该在这里工作。您可能会将文件读入共享内存(同步和更新可能很棘手),选择内存较低的 XML 解析器,或间接访问信息,例如通过 XML 数据的“编译” GDBM或您编写的自定义服务器回答查询。

于 2010-05-12T05:55:42.060 回答