gpt4 book ai didi

perl - 在 mod_perl 环境中使用共享内存

转载 作者:行者123 更新时间:2023-12-05 01:01:56 26 4
gpt4 key购买 nike

我有一个要求

  • 我必须在内存中放置一个数据结构(Perl 哈希),以便每个 HTTP 进程(运行 Perl 脚本)都使用该哈希。
  • 哈希结构约为 300 MB。
  • 环境是 mod_perl

  • 我想创建一个在 Apache 启动时加载的模块,该模块在共享区域中创建一个哈希并返回对它的引用。

    您能否对这种行为发表评论,或提出替代解决方案。还请指出一些好的资源来检查示例。

    最佳答案

    如果你在 mod_perl 内存上放置大量散列数据,
    然后 mod_perl 父进程在服务器启动阶段读取它。

    首先,您创建 Your/HugeData.pm@INC目录。

    package Your::HugeData;

    our %dictionary = (
    ....
    );

    接下来,apache 进程在启动时读取它。
    # In apache.conf (or anywhere apache config file)
    PerlModule Your::HugeData

    然后你的脚本可以使用 %Your::HugeData::dictionary作为包变量。
    # In mod_perl handler script or ModPerl::Registry (CGI emulate) script.
    use Your::HugeData;
    ...
    my $tokyo = $Your::HugeData::dictionary{tokyo};

    在 Linux Apache 上使用 prefork MPM 时,操作系统更喜欢“写时复制”机制。
    因此,如果您只读取数据,则 fork 的子进程会看到父进程的数据。
    换句话说,可能没有浪费内存使用。

    关于perl - 在 mod_perl 环境中使用共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27242772/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com