zoukankan      html  css  js  c++  java
  • 一,前言

    一,几个重要概念

    1.同步(synchronous)和异步(asynchronous)

      对方法调用而言,对于时间轴上,同步方法调用会等待返回,方法执行多久会等待多久而对于异步而言,方法会瞬间返回,但瞬间返回并不代表执行完毕,它会后台重启一个线程去执行。

    2.并发(Concurrency)和并行(Parallelism)

      并行:多个线程或线程同时进行,多余单个cpu,不可能出现并行;

      并发:多个线程或进程是调度执行;

    3.临界区

      用来表示一种公共资源或者共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程想要使用这个资源,就必须等待。

    4.阻塞(Blocking)和非阻塞(Non-Blocking)

      阻塞和非阻塞通常用来形容多线程之间的相互影响。比如一个线程占用了临界区资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其他所有阻塞在这个临界区上的线程就不能工作。

      非阻塞允许多个线程同时进入临界区。

    5.死锁(Deadlock),饥饿(Starvation)和活锁(Livelock)

      死锁:静态状态

      饥饿:指某一个或者多个线程因为种种原因无法获得需要的资源,导致一直无法执行。

      活锁:电梯遇人,动态

    6.并发级别

      阻塞:当一个线程进入临界区后,其他线程必须等待;

      无障碍(Obstruction-free):

        无障碍是一种最弱的非阻塞调度;自由出入临界区;无竞争时,有限步完成操作;有竞争时,回滚数据,无限重试;

      无锁(Lock-Free):是无障碍的,保证有一个线程可以胜出;

        while(!atomicVar.compareAndSet(localVar,localVar+1)){

          localVar = atomicVar.get();

        }

      无等待(Wait-Free):无锁的;要求所有线程都必须在有限步内完成;无饥饿的

    二,有关并行的2个定律

    1.Amdahl定律(阿姆达尔定律)

      定义了串行系统并行化后加速比的计算公式和理论上限;

      加速比定义:加速比=优化前系统耗时/优化后耗时;

      Tn=T1(F+1/(n(1-F)))

      n:处理器个数;F:串行比例;1-F:并行比例;T1:优化前耗时;Tn:优化后耗时

      加速比 = Tn/T1=1/(F+1/(n(1-F)))

      增加cpu处理器的数量并不一定能起到有效作用,提高系统内可并行化的模块比重,合理增加并行处理器数量,才能以最小的投入,得到最大的加速比。

    2.Gustafson定律(古斯塔夫森)

      说明处理器个数,串行比例和加速比之间的关系

      执行时间 :a+b(a:串行时间;b:并行时间)

      总执行时间:a+nb(n:处理器个数)

      加速比:(a+nb)/(a+b)

      定义串行比例:F=a/(a+b)

      加速比S(n)=(a+nb)/(a+b)=a/(a+b)+nb/(a+b)=F+n(1-a/(a+b))=F+n(1-F)=n-F(n-1)

      只要有足够的并行比,那么加速比和cpu个数成正比。

  • 相关阅读:
    C#解析json的几种方式
    记一次linux服务部署
    记一次AngularJs 路由 $stateChangeStart不起作用(细节决定成败)
    Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
    elasticsearch服务安装采坑
    spring boot ${}占位符不起作用
    js 事件冒泡、捕获;call()、apply()
    angular $digest already in progress
    idea其他人把jar更新之后更新不到
    spring接入swagger后单元测试报错
  • 原文地址:https://www.cnblogs.com/li-jing/p/10681684.html
Copyright © 2011-2022 走看看