boost::regex_match 会对整行日志内容进行全量正则匹配,当行首正则包含 .* 后缀时,匹配时间与日志行长度呈线性增长关系。对于一行 253 个字符的日志,全量匹配会处理所有字符。相比之下,boost::regex_search 配合 boost::match_continuous 标志只匹配字符串开头的子串,一旦行首部分满足正则表达式就返回成功,执行时间基本保持恒定,不受日志行长度影响。实测数据显示,单线程场景下使用 regex_match 的多行采集速度仅为 98MB/s,而使用 regex_search 后提升至 350MB/s,接近单行采集的 425MB/s(达到 82.35%)。这种优化对处理包含堆栈信息的多行日志尤其有效,因为这类日志通常较长。
加载中...