LINUX.ORG.RU

История изменений

Исправление DRVTiny, (текущая версия) :

Если да, то выбора быть не может, синхронная запись в файл всё залочит при затупах диска.

Просто вспомни о том, что в асинхронном приложении абсолютно любой «синхронный» код всё лочит: захотел посчитать факториал - «всё залочил», а потом вдруг в цикле дорогостоящим интерпретируемым кодом объёмную структуру данных поменять захотел - аналогично, всё залочил. Тогда уж надо пропагандировать AnyEvent->idle - т.е. обработку чего бы то ни было тогда и только тогда, когда никакие иные события процесс не обрабатывает. Все эти чудесные асинхронные коллбеки - они же просто выстраиваются в цепочку, и если событие Б наступило в тот момент, когда событие А ещё отрабатывается колббеком - можно с таким же успехом считать, что обработка события Б была заблокирована коллбеком обработки события А.

В общем-то любой Perl'овый код, который не выглядит как одна большая цепочка в духе Mojo::IOLoop::Delay с прилепленными где-то сбоку обработчиками состояния Idle - является, мягко говоря, не вполне асинхронным.

Собственно, именно по этой причине в приложениях на Си для обработки асинхронных событий часто используются треды. Но мы-то знаем, почём треды Perl'а...

Исходная версия DRVTiny, :

Если да, то выбора быть не может, синхронная запись в файл всё залочит при затупах диска.

Просто вспомни о том, что в асинхронном приложении абсолютно любой «синхронный» код всё лочит: захотел посчитать факториал - «всё залочил», а потом вдруг в цикле дорогостоящим интерпретируемым кодом объёмную структуру данных поменять захотел - аналогично, всё залочил. Тогда уж надо пропагандировать AnyEvent->idle - т.е. обработку чего бы то ни было тогда и только тогда, когда никакие иные события процесс не обрабатывает.

Проще говоря, любой Perl'овый код, который не выглядит как одна большая цепочка в духе Mojo::IOLoop::Delay - является, мягко говоря, не вполне асинхронным.