【NanoLog】日志线程部分源码剖析
RuntimeLogger
主要任务是管理thread-local存储,来放置未压缩的log信息,然后管理一个后台线程来压缩log信息到输出文件。
class RuntimeLogger
数据成员:
static __thread StagingBuffer *stagingBuffer:静态的\ *thread关键字类型 StagingBuffer,用于暂存未压缩的日志语句以备压缩的存储空间。这个就是为每个线程创建的一个线程局部的日志缓存。*thread变量每一个线程都有一份独立实体,各个线程之间互不干扰,每新建一个线程就重新复制这份变量。线程局部缓存只会创建一次!是static的。
static thread_local StagingBufferDestroyer:用于摧毁__thread的stagingBuffer,和线程的死亡同步。
std::vector<StagingBuffer *> threadBuffers; :
*char compressingBuffer:动态分配空间来保存压缩后的log数据,这些数据会被传递给POSIX AIO library用于输出。
*char outputDoubleBuffer:辅助以上。
函数接口:
inline void ensureStagingBufferAllocated():
分配