Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Perl解释器线程的替代方案是什么?_Multithreading_Perl - Fatal编程技术网

Multithreading Perl解释器线程的替代方案是什么?

Multithreading Perl解释器线程的替代方案是什么?,multithreading,perl,Multithreading,Perl,说: 官方不鼓励在perl中使用基于解释器的线程 还有其他基于Perl的线程吗?还是我们不应该在Perl中使用线程?据我所知,没有任何可靠的线程实现。您应该坚持使用一些基于事件的模块,如等。警告是poppycock。它应该被移除。Perl的开发人员解释说,这意味着“如果您想要一个轻量级的多任务系统,官方不鼓励在Perl中使用基于解释器的线程” 因为创建新线程可能会很昂贵,所以只需使用包含可重用工作线程的模型。取决于您试图完成的任务。我仍然广泛地使用线程,它们没有大的问题 它们最大的问题是它们不是

说:

官方不鼓励在perl中使用基于解释器的线程


还有其他基于Perl的线程吗?还是我们不应该在Perl中使用线程?

据我所知,没有任何可靠的线程实现。您应该坚持使用一些基于事件的模块,如等。

警告是poppycock。它应该被移除。Perl的开发人员解释说,这意味着“如果您想要一个轻量级的多任务系统,官方不鼓励在Perl中使用基于解释器的线程”


因为创建新线程可能会很昂贵,所以只需使用包含可重用工作线程的模型。

取决于您试图完成的任务。我仍然广泛地使用线程,它们没有大的问题

它们最大的问题是它们不是轻量级的,如果您使用过其他语言,您可能会期望它们是轻量级的

相反,产生一个线程就像再次启动代码一样,但是有一些对IPC有用的钩子。这意味着您真的不想像您可能想到的那样,在程序的每个线程模型中执行任务

相反,使用
Thread::Queue
worker线程样式的模型会更好。下面是一个例子:

但是,您可能需要考虑使用<代码> For < /代码>作为替代。code>fork——因为它是在Unix上实现的——是一个非常有效的系统调用,并且对于生成新进程非常有效。 不利的一面是,做IPC不太友好

Parallel::ForkManager
是我喜欢的一个模块,用于进行多处理的forking


但在任何一种情况下,你都应该注意到——多处理并不是一个灵丹妙药。如果你有正确的问题要解决,它可以让你占用更多的CPU。它不会让你的磁盘运行得更快:)

答案取决于你为什么认为你需要线程。相关:只是因为文档不清楚,Coro是一个合作的多任务系统。如果您想使用线程在多个内核之间分配CPU负载,这将毫无帮助。两者都不是基于事件的系统。当大多数任务都花在等待外部事件上时,Perl线程非常有用。如果你来自另一种语言的话,你可能会觉得它们不是一条轻量级的线。我发现的最大的“缺陷”是假设它们是轻量级的,就像在其他一些语言中一样。