美文网首页
Java高并发实战-01

Java高并发实战-01

作者: 看不懂我的错 | 来源:发表于2018-03-30 16:20 被阅读0次

    为什么需要写并行的代码?

    -业务要求

    -性能

    怎么在串行的程序当中且执行并行?

    并行跟多线程是同一个概念吗?

    为什么不用进程?

    -进程开销比较大,所以用线程。

    -多线程性能比较好。

    任务调度是什么?

    并行有什么缺点:

    -并行的代码比较难维护。

    为什么需要并行?

    -单核CUP发展到了瓶颈,现在往多核CUP发展。

    -硬件设计者无计可施了,要靠软件并行解决。

    几个重要的概念

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

    同步的话,就是做完一件事再做另外一件事。

    异步的话,就是做完A事情,告诉别人去B事情,自己跑回来做C事情。B事情和C事情同时都在做。

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

    3、临界区

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

    4、阻塞(Blocking)和非阻塞

    -阻塞:比如一个线程占用了临界区资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起(?)。此时如果占用资源的线程一直不愿意释放资源,那么其他所有阻塞在这个临界区上的线程都不能工作。(这不就是占着茅坑不拉屎吗)

    -非阻塞:允许多个线程同时进入临界区。(如果同时多个人进去厕所,那该多恐怖?其实也没什么,也试过跟哥们一起上厕所啦~)

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

    饥饿就是有的线程永远无法执行。

    6、阻塞级别

    阻塞-当一个线程进入临界区,其他线程必须在临界区外等待。(悲观)

    (非阻塞)无障碍-最弱的非阻塞调度,自由出去临界区,无竞争时,有限步内完成操作,有竞争时,回滚数据(乐观)

    (非阻塞)无锁-是无障碍的。保证有一个线程可以胜出。

    (非阻塞)无等待-无锁的。要求所有的线程都必须在有限步内完成。无饥饿的。

    两个定律:

    ·Amdahl定律

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

    在CPU合理的情况下,适当调整串行比例。

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

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

    ·Gustafson定律(古斯塔夫森)

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

    在串行比例合理的情况下,拼命加CUP就ok了

    相关文章

      网友评论

          本文标题:Java高并发实战-01

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