zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

读写锁性能学习

性能学习 读写
2023-09-14 09:11:19 时间

转自:https://juejin.cn/post/6844903564720996365

1.互斥与读写

一个常见的误区是,认为在读多写少的情况下,rwlock的性能一定要比mutex高。
  • 实际上,rwlock由于区分读锁和写锁,每次加锁时都要做额外的逻辑处理(如区分读锁和写锁、避免写锁“饥饿”等等),单纯从性能上来讲是要低于更为简单的mutex的;
  • 但是,rwlock由于读锁可重入,所以实际上是提升了并行性,在读多写少的情况下可以降低时延。
上述juejin链接中给的例子很好。
  • 对于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耗时。