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