《实战Java高并发程序设计》学习记录1

学习自《实战Java高并发程序设计》

  • 为什么需要并行


    image.png

    《实战Java高并发程序设计》学习记录1_第1张图片
    image.png

    《实战Java高并发程序设计》学习记录1_第2张图片
    image.png

看几个概念

  • 同步和异步


    《实战Java高并发程序设计》学习记录1_第3张图片
    image.png
  • 并行和并发

并行:完全同时运行
并发:一会儿这个执行,一会儿那个执行
一般情况下不严格区分这俩

《实战Java高并发程序设计》学习记录1_第4张图片
image.png
  • 临界区

Google释义:临界区 指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。

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


《实战Java高并发程序设计》学习记录1_第5张图片
image.png
  • 阻塞和非阻塞

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

  • 死锁( Deadlock)、饥饿( Starvation)和活锁( Livelock)
    死锁(这是个静态的问题,碰到这样的问题,线程就不动了):


    《实战Java高并发程序设计》学习记录1_第6张图片
    image.png

饥饿是指某一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行。(线程优先级不高,一直得不到资源)

活锁:电梯相遇,一直相互让

  • 并发级别


    《实战Java高并发程序设计》学习记录1_第7张图片
    image.png

阻塞:认为是一种很悲观的处理手段

无障碍(宽进严出):
– 无障碍是一种最弱的非阻塞调度
– 自由出入临界区
– 无竞争时,有限步内完成操作
– 有竞争时, 回滚数据

无锁:
– 是无障碍的
保证有一个线程可以胜出

《实战Java高并发程序设计》学习记录1_第8张图片
image.png

无等待:
– 无锁的
– 要求所有的线程都必须在有限步内完成
– 无饥饿的
典型案例:一堆读线程,一定是无等待的,它们可以自由的出入临界区

  • 阿姆达尔定律


    《实战Java高并发程序设计》学习记录1_第9张图片
    image.png
  • 古斯塔夫定理


    《实战Java高并发程序设计》学习记录1_第10张图片
    image.png

你可能感兴趣的:(《实战Java高并发程序设计》学习记录1)