如何解决C++ - 以面向性能的方式读取日志级别
logger 组件是一个静态库。应用程序(服务)加载大约 20 个 DLL。应用程序和 DLL 与静态记录器库链接。还有其他应用程序 (UI/CLI) 可以更新 Windows 上共享内存中的日志级别。
主应用程序和 DLL 从共享内存中读取日志级别并决定是否记录特定的日志语句。读取日志级别受命名互斥锁保护,这会带来巨大的性能损失。
使阅读日志级别轻量化的最佳方法是什么。
解决方法
就像@rustyx 建议的那样,使用 std::atomic<>
可能是您的最佳选择。缓存一致性协议会为您处理同步,而且速度会尽可能快,而无需您自己监控更改。
几点:
- 使其尽可能小,例如使用
atomic_uchar
。 - 通过
is_lock_free()
方法验证实现是无锁的。 - 验证它是无地址的,因为您需要将它保存在共享内存中(请查看您的编译器或标准库的文档)。
否则,如果 1. 原子开销对你来说太大,2. 日志级别几乎从不改变,3. 你不介意改变后的小“延迟”,那么你可以创建一个本地副本并拥有您每隔“一段时间”监视一次更改的事件队列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。