[Moscow.pm] Захотелось мне "хуков" после вызова fork.

Dmitry Karasik dmitry на karasik.eu.org
Пт Янв 29 12:10:29 PST 2016


Я не совсем понимаю зачем это может быть нужно на уровне модуля, 
но на уровне объекта есть аналог CLONE для тредов. Для форков ... ну может
тоже и пригодится в своем роде.

http://perldoc.perl.org/perlmod.html#Making-your-module-threadsafe

/dk

On Wed, Jan 27, 2016 at 12:18:47AM +0300, Evgeniy Vansevich wrote:
> <div>Приветствую всех! Буквально несколько часов назад захотелось иметь нечто, называемое child_callback.</div><div>А именно: мы форкаемся, и после форка в чилдах автоматом вызывается некая функция, которая делает всю грязную работу за нас.</div><div>Быстрый поиск сказал, что ничего похожего нет, и как итог сделал сам.</div><div>Сделал 2 версии, первая версия после форка проходится по арене(Devel::Gladiator) и ищет функции AFTER_FORK(для пакетов) и AFTER_FORK_OBJ (для объектов). Которые потом и вызываются.</div><div>И вторая версия, которая хранит в себе "колбэки" которые нужно вызвать после форка, колбэки из модулей сами напихиваем из модулей.</div><div> </div><div>Первая версия: <a href="https://gist.github.com/kadavr/e46fa7380b610bbf095e">https://gist.github.com/kadavr/e46fa7380b610bbf095e</a></div><div>Вторая версия: <a href="https://gist.github.com/kadavr/dbed30507eceb3509b22">https://gist.github.com/kadavr/dbed30507eceb3509b22</a></div><div> </div><div>Сразу вопросы: Какая реализация вам больше нравится? и нужен ли такой модуль на cpan?.</div><div> </div><div>И моё мнение по поводу этих модулей:</div><div>Плюсы первой версии:</div><div><ol><li>Простой интерфейс - определяем в своём модуле две функции AFTER_FORK и AFTER_FORK_OBJ, в зависимости от ситуации и остальное зависит уже от того, кто использует модуль, - загрузил он его или нет.</li><li>Однозначно живые объекты, и мы никак не влияем на время жизни объекта(Об этом ниже).</li></ol><div>Минусы:</div><div><ol><li>Скорость работы зависит от размера арены(можно ускорить перенеся всю логику в xs).</li></ol><div>Плюсы второй версии:</div><div><ol><li>Элементарная pure perl реализация.</li><li>Скорость работы зависит от кол-ва колбэков.(Их явно меньше, чем sv в арене).</li></ol><div>Минусы</div><div><ol><li>Так как мы используем колбэки, то всё что мы захватим то будет жить ровно до момента выхода.</li><li>Или можно взять weaken и каждый раз проверять "валидность" ссылки.</li></ol><div>Спасибо.</div></div></div><div> </div></div></div>
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org


-- 
Sincerely,
	Dmitry Karasik



Подробная информация о списке рассылки Moscow-pm