Perl中的非阻塞/异步执行

前端之家收集整理的这篇文章主要介绍了Perl中的非阻塞/异步执行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在Perl中实现非阻塞/异步执行(不使用 fork()?)?

我以前是一个Python开发人员多年,Python有一个非常好的“Twisted”框架,允许这样做(使用DEFERREDs.当我运行搜索,看看Perl中有没有什么可以做同样的事情,我遇到了POE framework – 似乎“接近”我正在寻找的东西,但是…花了一些时间阅读文档和“玩”代码后,我反对“墙” – 这是以下限制(从POE::Session文档):

Callbacks are not preemptive. As long as one is running,no others will be dispatched. This is known as cooperative multitasking. Each session must cooperate by returning to the central dispatching kernel.

这个限制本质上是违反了异步/并行/非阻塞执行的目的 – 通过限制在任何给定时刻只执行一个回调(代码块).没有其他回调可以开始运行,而另一个已经运行!

那么… Perl有什么办法可以实现多任务(并行,非阻塞,异步执行代码),而不需要fork()? – 类似于DEFERREDs在Python中?

解决方法

Coro是POE和线程之间的混合.从阅读它的CPAN文档,我认为IO :: Async执行真正的异步执行. threads也可以使用 – 至少Padre IDE成功使用它们.

猜你在找的Perl相关文章