首页 > 其他分享 >读写锁性能学习

读写锁性能学习

时间:2023-03-11 17:44:06浏览次数:47  
标签:real sys 读写 CPU 学习 耗时 user time 性能

转自: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耗时。

 

标签:real,sys,读写,CPU,学习,耗时,user,time,性能
From: https://www.cnblogs.com/BlueBlueSea/p/17206588.html

相关文章

  • Gin学习笔记--使用路由组分类处理请求
    在实际的项目开发中,均是模块化开发,同一模块化的功能接口,往往会有相同的接口前缀,比如说用户有不同的注册,登录等注册:http:..localhost:8080/user/register登录:http://loca......
  • MySQL学习笔记-SQL实践1
    SQL实践1借着学校的数据库实验,来对之前学习的SQL语言进行实践和总结。实验环境:macOS13.2(22D49)mysqlVer8.0.32formacos13.0onarm64(Homebrew)DataGrip20......
  • 创建python虚拟环境(深度学习)
    本文根据杨力-中量大AI老师的配置进行记录学习:1.打开cmd     2.创建虚拟环境  3.激活虚拟环境 4.文件夹中的目录结构  以后想用python就来这里就......
  • uniapp+django 新手学习步骤记录
    1.Django项目和uni-app项目的创建及项目文件讲解_慕容星言的博客-CSDN博客 注意同时安装了python2和python3,pip记得用pip3用pythonmanage.pystartappuniappclient创......
  • 数据结构学习笔记-day2
    Day2一、算法和算法分析算法特性:有穷性、确定性、可行性、输入、输出。2.算法的时间复杂度:(影响算法时间代价的最主要因素是问题规模)               ......
  • 有监督学习——梯度下降
    1.梯度下降梯度下降(GradientDescent)是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法,在理论上不保证下降求得最优解。e.g.假设有三维曲面表达函数空间,长(x)......
  • c#异步编程学习记录之一 async和await
    async放在方法名前面,表示当前方法是一个异步的方法await等待返回结果,一般这个后面会跟着一个比较耗时的操作示例如下:Console.WriteLine("Hello,World!")......
  • 3月9号Android开发学习
    禁用与恢复按钮在实际业务中按钮通常有两种状态,不可用状态和可用状态,它们的区别如下:(1)不可用按钮:按钮不允许点击,即使点击也没有反映,同时按钮文字为灰色(2)可用按钮:......
  • Gin学习笔记--多数据格式返回请求结果
    一个完整的请求包含请求,处理请求和结果返回三个步骤,在服务器端对请求处理完成后,会将结果返回给前端。1.[]byte通过context.Writer.Write方法写入[]byte数据。Writer是gin......
  • 学习日记-Day5
    日期2023-3-10任务列表离散数学第六章【100%】leetcode回溯算法x2、动态规划x4明天计划计网复习TCP、IP、HTTP协议巩固数据库和软工知识综合面问题离......