我使用IO :: Socket :: INET使用Perl创建了一个客户端 - 服务器程序.我通过基于CGI的站点访问服务器.我的服务器程序将作为守护程序运行,并将接受多个同时连接.我的服务器进程占用大约100MB的内存空间(9个大型阵列,许多阵列......).我希望这些哈希驻留在内存中并共享它们,这样我就不必为每个连接创建它们.哈希创建需要10-15秒.
每当通过套接字接受新连接时,我会分叉一个新进程来处理收到的每个连接的处理.由于父进程很大,每次我分叉时,处理器都会尝试为新的子进程分配内存,但是由于内存有限,需要很长的时间来生成一个新的子进程,从而增加了响应时间.很多时候,即使是单个连接,它也会挂起.
父进程创建9个大哈希.对于每个孩子,我需要以只读模式引用一个或多个哈希.我不会通过孩子更新哈希.我想使用像copy-on-write这样的东西,通过它我可以与所有孩子共享整个100mb或由父母创建的全局变量?或任何其他机制,如线程.我希望服务器每秒至少得到100个请求,它应该能够并行处理所有这些请求.平均而言,孩子将在2秒内退出.
我在Windows XP上使用Cygwin只有1GB的RAM.我没有找到任何方法来克服这个问题.你能提出什么建议吗?如何共享变量并每秒创建100个子进程并管理它们并同步它们,
谢谢.