【发布时间】:2024-04-29 16:50:02
【问题描述】:
我想让我的 Perl 程序使用多核。它逐步读取查询输入,并将其中的块与每次运行时从文件加载到内存中的只读数据结构进行比较。该数据结构通常为几千兆字节,是一小组用于小型 C 例程的打包字符串。当进程分叉时,所有内容都会被复制,这在多核机器上会迅速耗尽 RAM。我尝试了几个非标准模块,但都导致运行缓慢和/或损坏 RAM。我认为,对于只读数据,Perl 不会坚持制作副本。其他语言可以做到。有人有想法吗?
【问题讨论】:
-
这个讨论看起来很有趣:*.com/questions/9733146/… 特别是有人建议安装一些 RAM 作为硬盘驱动器,然后从那里使用文件 I/O。那会解决你的问题。问题是:值得吗?
-
谢谢,使用文件是一种选择。但我认为孩子们会如此旋转磁盘,以至于多核速度变得比单核速度更差,所有这些都在内存中。我这么说是因为我有一个使用文件的程序的早期版本,它慢了 20 倍。其中一个模块使用 Sockets 使内存“共享”,但这太慢了很多。
-
请注意,dan1111 并不建议您使用实际文件。磁盘旋转不会进入此解决方案。
-
啊,是的,我看错了。但是制作 ramfs 是特定于操作系统的,我也希望程序以普通用户身份运行。我可以试试 Sys::Mmap。
-
“炸毁内存”是什么意思?我在 Google 上找不到与该短语相关的任何内容。
标签: perl memory process shared readonly