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