perl - Perl 中的非阻塞/异步执行

标签 perl asynchronous parallel-processing nonblocking

有没有办法在 Perl 中实现非阻塞/异步执行(没有 fork() 'ing)?
我曾经是一名 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() 的情况下实现多任务(并行、非阻塞、异步执行代码)? 'ing - 类似于 DEFERREDs在 Python 中?

最佳答案

Coro是 POE 和线程的混合体。通过阅读其 CPAN 文档,我认为 IO::Async 执行真正的异步执行。 threads也可以使用——至少 Padre IDE 成功地使用了它们。

关于perl - Perl 中的非阻塞/异步执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548224/

相关文章:

c# - 了解 C# 中具有 "ContinueWith"行为的异步/等待与等待

c++ - 并行 vector 调整大小不加速

c++ - 避免线程本地存储开销(使 ffmpeg YADIF 可扩展)

c# - TCP C# 客户端可以在不休眠的情况下连续/连续地接收和发送吗?

android - 使用 OAuth2 改进异步调用

multithreading - TParallel.For : Store values in a TList while they are calculated in a TParallel. For 循环

perl - 使用 perl WWW::Mechanize 处理 404 和内部服务器错误

perl - 从 DAG 中提取树

perl - 使用 Perl 连接到 Postgres

apache - XAMPP 服务器上的 Perl 给出错误 500