c++ - c++ 中的 g3log 记录器在记录器初始化时引入了停顿/延迟
问题描述
我正在使用 libaio 库使用 c++ 写入磁盘上的文件。我正在使用 g3log 记录消息,并像这样初始化记录器:
auto log_worker = g3::LogWorker::createLogWorker();
auto sink_handle = log_worker->addSink(std::make_unique<CustomSink>(), &CustomSink::forwardLogToStdout);
g3::initializeLogging(log_worker.get());
我创建了一个这样的自定义类:
class CustomSink{
public:
void forwardLogToStdout(g3::LogMessageMover logEntry)
{
std::cout<<logEntry.get().message()<<"\n";
}
};
我有一个类Foo
,它有一个成员函数func
,它/tmp/test
使用 libaio 函数(io_submit
如io_getevents
. 当我注释记录器初始化代码时,我可以在0.15
几秒钟内写入大小为 64MB 且缓冲区大小为 4k 的完整文件。当我取消注释记录器初始化时,文件的“写入”大约需要1.5
几秒钟。我读过 g3log 是一个异步记录器,它是最快的记录器。我无法弄清楚为什么在我的程序中使用 g3log 会有这么多延迟。我尝试在没有 g3log 记录器初始化的情况下多次运行程序,并且写入按预期执行。但是,当我添加记录器初始化时,它会减慢写入文件的速度。
这是 g3log 记录器初始化的问题,还是与 libaio 相关的问题,或者与文件系统相关的问题?我是一个完全的初学者,并且会喜欢来自社区的任何指导。
解决方案
推荐阅读
- ruby-on-rails - 将代码移至 gem 后如何调试代码
- ruby-on-rails - Ruy - 如何包含一个巨大的数组的 .rb 文件
- java - 为什么 Java 崩溃(退出代码 134)?
- sql - 如何获得命名内部联接的不同计数?
- javascript - 查看源代码时如何使代码在单行中?
- java - 尝试在空对象引用上调用虚拟方法 'android.app.Notification androidx.core.app.NotificationCompat$Builder.build()'
- c# - 需要向 NewActionConfiguration 添加参数,但不能在定义中使用 foreach
- sql - 如何使用 over() 函数列出出现次数,但只显示结果中列出 3 次或更多次的出现次数?
- python - 带 Heroku 的 Telebot
- android - 实时数据库显示数据是否仍未上传