кооперативная многозадачность в рамках одного процесса.
Это значит, что в рамках одного процесса:
1) Пока один асинхронный обработчик не завершится - другой не запустится;
2) Факт наступления нового события выявляется исключительно между запуском асинхронных обработчиков, время выполнения которых в худшем случае может быть непредсказуемым. Это значит, что если событие требует реакции от приложения за разумное время (пример: подключение на сокет) - его можно и прошляпить ненароком;
3) «Зато» в асинхронном обработчике A0 невозбранно можно пользоваться любыми глобальными переменными (до первого асинхронного вызова A1 внутри данного А0 - даже если A0 блокируется в ожидании результатов A1) и вообще мало задумываться о том, что приложение не вполне последовательно выполняется.
Я почитал доки по libev, ну и в целом не первый год пишу код с использованием AnyEvent+EV и Mojolicious (на самом деле те же AnyEvent+EV) - вроде всё так и есть...
Прошу поправить/опровергнуть меня и/или дополнить. Спасибо!