如果您想了解如何使用Perl解释器线程,有良好的文档perlthrtut(线程教程),并在threads附注手册页.写一些简单的脚本绝对够好.
但是,我发现在网络上的一些指导,为什么和怎样明智地使用Perl解释器线程.事实上,关于它们的讨论并不多,如果人们谈论它们,通常会阻止人们使用它们.
这些线程,可当perl -V:useithreads是useithreads='define';和释放use threads,也被称为的ithread,也许更恰当,以便他们有很大的不同,从由Linux或Windows操作系统或Java虚拟机中的任何内容所提供的线程默认情况下,而是一个共享大量数据被复制,而不仅仅是线程堆栈,因此显着增加了进程大小.(要查看效果,请在测试脚本中加载一些模块,然后在循环中创建线程,每次都按下按键,并观察任务管理器中的内存增加或top.)
[...]每次启动线程时,所有数据结构都将复制到新线程中.当我说全部,我的意思是全部.这包括包括stashes,全局变量,范围内的词汇.一切!
- 编程Perl ithreads之前需要了解的事情(Perlmonks 2003)
在研究Perl ithreads的主题时,你会看到人们不鼓励你使用它们("非常糟糕的主意","从根本上有缺陷",或"从不使用ithreads for any").
Perl线程教程强调"Perl线程是不同的",但它没有太多麻烦解释它们是如何不同以及这对用户意味着什么.
有关ithreads实际内容的有用但非常简短的解释来自WINDOWS PROCESS EMULATIONCoro标题下的联机帮助页.该模块的作者(Coro - perl中唯一真正的线程)也不鼓励使用Perl解释器线程.
在某处我读到,在启用线程的情况下编译perl会导致解释器显着变慢.
有从2003年Perlmonks页面(你需要的东西之前的Perl编程的ithread知道),其中笔者问:"现在你可能想知道为什么Perl中的ithread不使用fork()那不是已经取得了很多更有意义?" 这似乎是由forkspragma 的作者写的.不确定该页面上提供的信息在2012年仍适用于较新的Perls.
以下是Perl中线程使用的一些指导原则,我从读数中提炼出来(可能是错误的):
HTTP::Async,or AnyEvent::Socket或Coro::Socket.我必须在我的代码中使用守护进程.我需要一个控制守护进程,它不断检查数据库中的任务并监督子守护进程.控制守护进程必须将任务分配给子守护进程,控制任务,如果其中一个死亡,则创建新子进程等.子守护进程检查数据库以查找它们的任务(通过PID).我应该如何为此目的实现守护进程?