Неблокирующее / асинхронное выполнение в Perl

Есть ли способ реализовать неблокирующее / асинхронное выполнение (без fork()'ing) в Perl?

Я был разработчиком Python в течение многих лет... В Python есть замечательный фреймворк Twisted, который позволяет это делать (используя DEFERREDs). Когда я искал, есть ли что-нибудь в Perl для того же самого, я наткнулся на POE framework - который показался мне достаточно "близким" к тому, что я искал. Но... потратив некоторое время на чтение документации и "игру" с кодом, я натолкнулся на "стену" - следующее ограничение (из документации POE::Session):

Обратные вызовы не являются вытесняющими. Пока выполняется один, другие не будут отправлены. Это известно как кооперативная многозадачность. Каждый сеанс должен сотрудничать, возвращаясь к центральному ядру диспетчеризации.

Это ограничение по сути уничтожает цель асинхронного/параллельного/неблокирующего выполнения - ограничение на выполнение только одного обратного вызова (блока кода) в любой момент времени. Никакой другой обратный вызов не может начать выполняться, пока другой уже выполняется!

Итак... есть ли в Perl способ реализовать многозадачность (параллельное, неблокирующее, асинхронное выполнение кода) без fork()'ing - подобно DEFERREDs в Python?

13
задан Brad Gilbert 20 December 2011 в 13:30
поделиться