#c #multithreading #logging
#c #многопоточность #ведение журнала
Вопрос:
При входе в глубокий цикл существуют ли регистраторы, которые позволяют генерировать сообщение журнала в текущем потоке, а затем записывать его на диск из другого потока?
Поскольку запись на диск является самой длинной операцией, это должно повысить эффективность регистратора.
Или разница может быть незначительной из-за кэша?
Комментарии:
1. Нравится Boost. Асинхронная ссылка журнала ?
Ответ №1:
Регистратор (или любая программа, на самом деле), который ставит операцию в очередь для обработки другим потоком, а затем немедленно возвращает, называется асинхронным. Асинхронные регистраторы существуют. Вот тот, который я использовал: g2log. Он кроссплатформенный и был протестирован на Windows и Linux.
Имеет ли асинхронное ведение журнала какие-либо преимущества для вас, зависит от того, сколько вы регистрируете.
Ответ №2:
Где вы регистрируетесь? Windows? Linux?
Если вы используете Linux и работаете в очень чувствительной к производительности среде, вы могли бы взглянуть на LTTng. Был разговор на FOSDEM (Youtube) об их подходе к ведению журнала. Суть этого: записывайте не строки, а коды ошибок и аргументы в (общую) память и используйте отдельный процесс для записи журнала на диск (общая память, сопоставленная другому процессу, сохраняется после дампа ядра).
Ответ №3:
Другой асинхронный регистратор из библиотеки POCO: