性能

作者: Cuccci | 来源:发表于2020-11-13 21:59 被阅读0次

    一、如何提高系统的性能?

    1. 衡量系统性能好坏的指标有哪些?

    衡量系统的运行速度的指标:服务时间、等待时间
    衡量系统的处理能力的指标:吞吐率、QPS、TPS等

    2. 如何提升应用的运行速度?

    通过优化算法将时间复杂度O(n^2) 优化成时间复杂度O(nlogn)
    通过缓存来重用之前计算结果

    3. 如何提高应用的处理能力?

    可以通过在应用中使用更多的线程来一起处理客户端的请求.

    4. 通过增加线程数量是否一定能提升应用的处理能力?

    在一定范围内,通过增加线程数量能提升处理能力。如果线程之间存在锁竞争的话,那么当线程数量超过某个阈值之后,应用的处理能力反而会降低。即使线程之间不存在竞争的话,如果线程数量过多导致线程开销过大。

    5. 为什么随着线程数量增加,反而有可能会导致处理能力下降?

    由于引入多线程本身就会带来的一定开销、线程数量的增加导致锁竞争加剧。

    5.1 线程开销有哪些?
    5.1.1 上下文切换

    如果可运行的线程的数量大于CPU的数量,那么操作系统会将某个正在运行的线程调度出去,从而使其他线程能够使用CPU。这将导致一次上下文切换,在这个过程中将保存当前运行线程的上下文,然后加载新调度进来的线程的上下文。

    5.1.2 内存同步

    当代码中使用了 synchronized 和 volatile 关键字之后,可能会使用一些特殊指令,即内存栅栏。内存栅栏可能会对性能带来一些间接的影响,因为它将抑制编译器的一些优化操作。

    5.1.3 阻塞

    线程之间如果存在竞争的同步操作,可能会导致需要操作系统的介入,从而增加开销。

    5.2 如何减少锁的竞争?
    5.2.1 缩小锁的范围

    通过缩小的锁的范围,从而减少锁的持有时间,达到线程的快进快出。常见的缩小的锁的范围:将方法锁改成代码块锁。

    5.2.2 减小锁的粒度

    通过锁分解和锁分段等技术实现,在这些技术中将采用多个互相独立的锁来保护独立的状态变量,从而降低锁发生竞争的可能性。

    5.2.3 放弃使用锁

    使用CAS来代替传统的锁方案,这样意味着线程之间不会存在竞争性,能大幅地提高线程并发能力。

    相关文章

      网友评论

          本文标题:性能

          本文链接:https://www.haomeiwen.com/subject/sdrsbktx.html