读写锁性能学习
转自:https://juejin.cn/post/6844903564720996365
1.互斥与读写
一个常见的误区是,认为在读多写少的情况下,rwlock的性能一定要比mutex高。
- 实际上,rwlock由于区分读锁和写锁,每次加锁时都要做额外的逻辑处理(如区分读锁和写锁、避免写锁“饥饿”等等),单纯从性能上来讲是要低于更为简单的mutex的;
- 但是,rwlock由于读锁可重入,所以实际上是提升了并行性,在读多写少的情况下可以降低时延。
- 对于mutex,user+sys基本等于real,可见其基本没有带来什么并行性;
- 而rwlock的user时间就要长于real,可见内层循环部分的代码,是有一定的并行性的。可重入性能充分利用了线程在IO等待的时间提高了并行性。
2.time命令
https://blog.csdn.net/baidu_35692628/article/details/77387827
real 0m0.895s
user 0m2.752s
sys 0m0.664s
程序执行时加上time能够粗略统计程序执行过程中的耗时。通常会有三个值real time, user time和sys time.
- real time:程序从开始到结束所经历的时间,也就是用户所感受到的时间。包括当前程序CPU的用时和所有延迟程序执行的因素的耗时总和(比如其他程序耗时,等待I/O完成耗时等)。
- user time:程序执行过程中在用户空间(user space)中所花费的所有时间,即程序用户模式下的CPU耗时。
- sys time:程序执行过程中内核空间(kernel space)中所花费的时间,即程序在内核调用中的CPU耗时。
关系:
- 当前进程的实际CPU耗时= user time + sys time
- 单线程情况下real/user/sys关系:real time = 当前进程的CPU耗时 + 其他因素耗时,cpu耗时如上,real time > 当前进程的CPU耗时
- 多核多线程情况下real/user/sys关系:不同线程可以并行执行,导致user + sys的时间可能大于real的时间。cpu耗时如上,real time < 当前进程的CPU耗时。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现