Perl 在进程之间共享和修改PSGI中的变量

Perl 在进程之间共享和修改PSGI中的变量,perl,variables,process,plack,psgi,Perl,Variables,Process,Plack,Psgi,我们有一个PSGI脚本,使用UWSGI和多进程和线程,寻找一个快速解决方案,在这些已处理和线程之间共享可编辑哈希。我使用内存中的存储进行测试,比如Cache::Memcached::Fast和Redis 与仅使用区域设置散列相比,有快速但不够快的方法 my %hash = (); 在我们的测试中,速度快了10倍。是否有一种在运行时共享可编辑变量的方法—比如有一种本地哈希方案—例如进程1正在更新 $hash{$id} = $new_val; 进程2也有$hash{$id}的新值 我还尝试了IP

我们有一个PSGI脚本,使用UWSGI和多进程和线程,寻找一个快速解决方案,在这些已处理和线程之间共享可编辑哈希。我使用内存中的存储进行测试,比如Cache::Memcached::Fast和Redis

与仅使用区域设置散列相比,有快速但不够快的方法

my %hash = ();
在我们的测试中,速度快了10倍。是否有一种在运行时共享可编辑变量的方法—比如有一种本地哈希方案—例如进程1正在更新

$hash{$id} = $new_val;
进程2也有$hash{$id}的新值

我还尝试了IPC::Shareable、MCE::Shared::Minidb或threads::Shared(threads::Shared:段内存限制),它们对PSGI确实有效


有没有办法在同一台机器上的所有进程之间共享快速-可编辑-局部变量?

为什么
threads::shared
不起作用?它只起部分作用,此模块仅限于默认/局部段内存限制。不过散列非常大(最少100K个元素;值很小)。threads::shared在设置哈希时内存不足:(“.100K元素..”您是如何耗尽内存的?您的共享数据消耗了多少内存?您收到了什么错误消息?我现在尝试使用大小为100M的共享变量,但没有收到任何错误。对不起,我的意思是IPC::Shareable内存不足。threads::shared不起作用。第二个进程没有%hash的值。threads::shared在PSGI环境?(我猜是一个并行/独立进程而不是线程)你说得对。Redis在这里的性能为0.010856秒。(在多处理器上测试;memcached应该比Redis性能更好)。任何接近“区域设置哈希性能”的解决方案