为什么需要写并行的代码?
-业务要求
-性能
怎么在串行的程序当中且执行并行?
并行跟多线程是同一个概念吗?
为什么不用进程?
-进程开销比较大,所以用线程。
-多线程性能比较好。
任务调度是什么?
并行有什么缺点:
-并行的代码比较难维护。
为什么需要并行?
-单核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了
网友评论