如何在fastCGI进程之间共享数据?

时间:2010-05-12 02:58:43

标签: apache2 fastcgi mod-fastcgi

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:8)

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

(FastCGI允许单个进程以串行方式处理多个请求,从而无需重新初始化,重新读取配置和XML数据,例如,在该进程首次提供之后的每个请求 。)

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