性能优化逻辑链

下面谈论的背景都是CPU密集型

提高性能的两种方式:

  1. 减少任务的执行时间
  2. 增加任务的计算单元
  • 第一种方式是单线程方式的优化思路,执行时间不可能一直减少,所以优化到一定程度后,会到达瓶颈。
  • 第二种优化方式是多线程并发思路的方式,可以通过增加处理任务的计算单元,让性能提高。由于提高不受限制,优于第一种方式。

并发方式也有瓶颈,瓶颈取决于并发任务中的串行部分

并发任务的串行部分,也就是多线程的数据共享部分。数据的共享的保护大多使用的是锁。多个线程在申请锁失败后,会进入阻塞状态等待这个锁,阻塞导致了线程上下文的切换,产生了线程的性能开销。

要避免线程的开销,必须减少锁的竞争。

锁的相关参数有两个:

  1. 锁的请求频率
  2. 持有锁的时间
  • 缩小锁范围(减少持有锁的时间)
  • 减小锁的粒度(降低锁的请求频率)

减小锁粒度,可以把一个大锁分成小锁。这里要注意死锁问题,避免死锁的常规方法是每个线程的加锁顺序必须相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,465评论 11 349
  • Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频...
    Rick617阅读 12,116评论 1 9
  • 一.线程安全性 线程安全是建立在对于对象状态访问操作进行管理,特别是对共享的与可变的状态的访问 解释下上面的话: ...
    黄大大吃不胖阅读 4,324评论 0 3
  • 当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异...
    JackFrost_fuzhu阅读 12,311评论 4 83
  • 大三暑假我没有回家,原本在学校这边兼职的,莫名失了业。这几天突然重新拿起笔,开始一窍不通的水彩。这幅画是临摹的,因...
    小蛙喵喵怪阅读 1,716评论 0 1