池化技术
池化技术可以减少底层重复工作,例如创建进程、线程、申请内存空间时的系统调用和初始化工作。线程池是执行流级别的池化技术,STL 中的空间配置器和内存池是内存块管理级别的池化技术。
线程池的日志模块
结合之前的封装进行线程池设计,需要完成以下准备:
- 准备线程的封装
- 准备锁和条件变量的封装
- 引入日志,对线程进行封装
日志与策略模式
什么是设计模式 针对一些经典的常见场景,给定了对应的解决方案。
什么是日志 计算机中的日志是记录系统和软件运行中发生事件的文件,主要作用是监控运行状态、记录异常信息,帮助快速定位问题并支持程序员进行问题修复。
日志格式必须包含以下指标:
- 时间戳
- 日志等级(严重程度)
- 日志内容
可选指标包括:
- 文件名行号
- 进程、线程相关 ID 信息等
现成的解决方案如 spdlog、glog 等,此处采用自定义日志方式。采用设计模式中的策略模式进行日志设计。
日志模块
两个核心问题
- 日志内容的刷新策略,刷新到显示器或文件或网络。
- 构建一条完整的日志。
设计文件等级
枚举类型中的枚举值底层存储为整数,需转换成字符串输出。
// Logger.hpp
enum class LogLevel {
DEBUG,
INFO, // 正常消息
WARNING, // 出现错误,但不影响程序运行
ERROR, // 导致程序退出的错误
FATAL // 重大错误
};
std::string Level_to_string(LogLevel level) {
switch(level) {
case LogLevel::DEBUG: return "DEBUG";
case LogLevel::INFO: return "INFO";
case LogLevel::WARNING: return "WARNING";
case LogLevel::ERROR: return "ERROR";
case LogLevel::FATAL: return "FATAL";
default: ;
}
}


