首页 > 解决方案 > 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_submitio_getevents. 当我注释记录器初始化代码时,我可以在0.15几秒钟内写入大小为 64MB 且缓冲区大小为 4k 的完整文件。当我取消注释记录器初始化时,文件的“写入”大约需要1.5几秒钟。我读过 g3log 是一个异步记录器,它是最快的记录器。我无法弄清楚为什么在我的程序中使用 g3log 会有这么多延迟。我尝试在没有 g3log 记录器初始化的情况下多次运行程序,并且写入按预期执行。但是,当我添加记录器初始化时,它会减慢写入文件的速度。

这是 g3log 记录器初始化的问题,还是与 libaio 相关的问题,或者与文件系统相关的问题?我是一个完全的初学者,并且会喜欢来自社区的任何指导。

标签: c++loggingiolatencyaio

解决方案


推荐阅读