java高并发程序设计(一)前言及概念

为什么需要并行:

1.摩尔定律的失效,单核CPU性能达到极限,导致现在的CPU普遍是多核,从而不得不使用并行开发。

2.业务模型需要:

并不是 为了提高系统性能,而是确实在业务上需要多个执行单元。

比如http服务器,为每一个Soket连接新建一个 处理线程。

让不同的线程担任不同的业务工作。

简化任务调度。

几个重要概念:

  • 同步(synchronous)和异步(asynchronous)
  • 并发(Concurrency)和并行(Parallelism)
  • 临界区
  • 阻塞(Blocking)和非阻塞(Non-Blocking)
  • 死锁(Deadlock)、饥饿(Starvation)、和活锁(Livelock)
  • 并行的级别

不手写了,贴课程图了


一个线程里, 该方法一直到执行结束才能开始执行下一个方法,这个方法执行过程就叫同步。

一个线程里,该方法的执行的过程交给了另一个线程,并不占用本线程的时间,并马上执行下一个方法,这个过程就叫异步。


两个线程同时执行,这个过程叫并行。

一个线程分时段的调度不同的任务,这个过程叫并发。





死锁指的多个线程之间占用的了相互需要的资源,引起线程堵塞,导致程序无法继续执行。(静态的现象,因为都是卡死的状态,所以不会占用CPU资源。)

活锁指的是多个线程需要占用多个资源,因为该资源被不同线程占用,导致线程无法完成任务,程序就无法执行,  同时他们都在释放自己的资源和占用需要的资源,从而导致程序一直无法正常执行。(非静态现象,一直占用着CPU资源)



阻塞一种悲观的策略,防止多个线程进入临界区导致数据资源损坏。


无障碍允许线程自由进入临界区,宽进严出,出现数据竞争时回滚操作


允许线程自由进入临界区,出现数据竞争时,保证一个胜出


允许线程自由进入临界区,出现数据竞争时,保证线程都必须在有限部数内完成,不会出现饥饿状态,性能是最好的,也是 数据最不安全的。(可以通过算法来解决安全问题,比如给每个线程一个数据副本)

阿姆达尔定律



古斯塔夫定律



转载于:https://juejin.im/post/5ba0ce7e6fb9a05cf7158b2d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值