有没有办法实现非阻塞/异步执行(无需fork() http://perldoc.perl.org/functions/fork.html'ing) 在 Perl 中?
我曾经是一名 Python 开发人员很多年了……Python 有非常出色的“Twisted”框架,可以做到这一点(使用延期 http://twistedmatrix.com/documents/current/core/howto/defer.html。当我搜索 Perl 中是否有任何东西可以做同样的事情时,我遇到了POE架构 http://p3rl.org/POE- 这似乎与我正在寻找的东西“足够接近”。但是......花了一些时间阅读文档并“玩”代码后,我遇到了“墙” - 这是以下限制(来自POE::会议 http://p3rl.org/POE::Session文档):
回调不是抢占式的。只要有一个人在跑,就不会派遣其他人。这称为协作多任务处理。每个会话必须通过返回中央调度内核进行协作。
这一限制本质上违背了异步/并行/非阻塞执行的目的 - 通过限制在任何给定时刻仅执行一个回调(代码块)。当另一个回调已经在运行时,其他回调不能开始运行!
那么... Perl 有什么方法可以实现多任务处理(并行、非阻塞、异步执行代码)而不用fork() http://perldoc.perl.org/functions/fork.html'ing - 类似于延期 http://twistedmatrix.com/documents/current/core/howto/defer.html在Python中?
Coro http://search.cpan.org/perldoc?Coro/Intro.pod是 POE 和线程的混合体。通过阅读其 CPAN 文档,我认为 IO::Async 确实是异步执行。threads http://search.cpan.org/perldoc?threads也可以使用 - 至少 Padre IDE 成功地使用了它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)