美文网首页
00-实战Java高并发程序设计-前言

00-实战Java高并发程序设计-前言

作者: stellarxiong | 来源:发表于2017-12-26 23:46 被阅读0次

    课程基础

    需要有java使用经验

    为什么需要并行

    • 业务要求
    • 性能

    几个重要的概念

    同步(synchonous)和异步(asynchonous)

    image

    并发(Concurrency)和并行(Parallelism)

    image

    临界区

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


    2.jpg

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

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

    锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)

    image

    并行的级别

    阻塞

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

    非阻塞

    无障碍
    • 无障碍是一种最弱的非阻塞调度
    • 自由出入临界区
    • 无竞争时,有限步内完成操作
    • 有竞争时,回滚数据
    无锁
    • 是无障碍的
    • 保证有一个线程可以胜出
    while (!atomicVar.compareAndSet(localVar, localVar+1)) 
    { 
           localVar = atomicVar.get(); 
    } 
    
    无等待
    • 无锁的
    • 要求所有的线程都必须在有限步内完成
    • 无饥饿的

    2个重要的定理

    Amdahl定律(阿姆达尔定律)

    • 定义了串行系统并行化后的加速比的计算公式和理论上限
    • 加速比定义:加速比=优化前系统耗时/优化后系统耗时
      image

    加速比=优化前系统耗时/优化后系统耗时=500/400=1.25

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

    Gustafson定律(古斯塔夫森)

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


      image
      image

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

    来源 炼数成金 葛一鸣 博客地址:http://www.uucode.net/

    相关文章

      网友评论

          本文标题:00-实战Java高并发程序设计-前言

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