性能瓶颈优化
实际功能代码的执行速度很快,多线程使用锁的方案会把大量的开销花费在锁的竞争上面,为了减少公共资源的抢占可以通过原子变量无锁的编程的方式优化代码。
pthread_atomic为已优化的应用,再次执行分析任务查看优化效果。
- 重新执行热点函数分析任务(pthread_atomic应用)。
使用系统热点函数监测锁热点时,在任务开启的同时,后台需运行对应的demo,否则无法采集到锁的热点。
表1 任务配置参数说明 参数
说明
分析对象
应用
分析类型
热点函数分析
应用路径
/opt/testdemo/pthread_atomic
采样时长
30秒
采样间隔
1秒
采样频率
100次/秒
采样范围
用户态
- 查看分析结果。图1 热点函数分析结果
- 重新执行锁与等待分析任务(pthread_atomic应用)。
表2 任务配置参数说明 参数
说明
分析类型
锁与等待分析
分析对象
应用
模式
Attach to process
PID
选择pthread_atomic应用对应的进程号
锁分析类型
全选
预定义锁类型
默认
采样时长
20秒
采集原数据最大大小
1024MiB
分析栈
关闭
- 查看分析结果。图2 锁与等待分析结果
可以看到已经没有锁函数的调用存在。
总结
通过热点函数分析和锁与等待分析任务,找到多线程应用代码中公共资源抢占下使用锁机制带来的额外开销,通过原子变量实现无锁编程实现了同样的效果,减少了不必要的开销。
父主题: 实践4:锁性能调优