我有一个perl程序,使用某种形式的并行性会非常有用。
但是,我在变量中有很多数据,我在程序的那一部分根本不需要 。
如果我使用perl线程,它会在每次创建新线程时复制所有变量。在我的情况下,这很痛苦。
如果没有复制,我应该使用什么来制作新帖子?或者是否有一些更好的线程实现,不会复制所有内容?
答案 0 :(得分:7)
就像语法一样容易线程而不是所有的胖?使用惊人的forks模块!它使用fork和IPC实现线程接口,使得在子进程之间共享数据变得容易。
答案 1 :(得分:4)
真的,你只需要避免ithreads。它们太可怕了,与地球上其他形式的线程不同,它们比普通的重量级进程更昂贵。我首选的解决方案是使用基于事件的框架,如POE或AnyEvent(我使用POE),并使用POE::Wheel::Run将任何无法无阻塞的任务分解为子进程(或fork_call for AnyEvent)。以这种方式编写应用程序需要更多的前期设计工作,但如果做得对,它将为您提供一些有效的代码。我还不时编写代码,直接在其自己的事件循环中使用fork
和pipe
(或open '-|'
)和IO::Select
以及waitpid
,但你应该考虑我在perl之前学习C的症状,而不是推荐。 :)
明智之言:如果你在Windows上运行,那么这种方法可能几乎与直接使用ithreads一样糟糕,因为Perl使用来弥补win32缺少fork()
ithreads ,因此您将在每个fork
上支付相同的ithread创建成本(在CPU和内存中)。那里的不是真的很好的解决方案。
答案 2 :(得分:3)