版权声明:版权归 爱装逼的文艺小青年所有 https://blog.csdn.net/toyota_rav4/article/details/84780063
目录
多线程
业务模型的需要
- 并不是为了提高系统的性能,而是在业务上确实需要多个执行单元
- 比如 http服务器为每一个Socket连接新建一个处理线程
- 让不同的线程承担不同的业务工作
- 简化任务调度
性能
摩尔定律失效
cpu单核性能瓶颈4GHZ,硬件开发者将性能抛给软件开发者
硬件上设计多核CPU,让多线程应用程序比单线程要快
多线程让整个应用相对单线程的应用来说,性能更好
核心概念
同步和异步
同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求,在不同的线程中执行
并发和并行
并行是指两个或者多个事件在同一时刻发生;
并发是指两个或多个事件在同一时间间隔发生。
并行举例子:两个人在喂两个孩子吃饭,这叫并行,因为是同时进行的 ;
并发举例子:如果是一个人喂两个孩子吃饭,轮流着每人喂一口,这叫并发,因为是交替进行的。
临界区
阻塞和非阻塞
死锁 饥饿 活锁
死锁举例:甲、乙都需要做蛋糕(假设:蛋糕需要 鸡蛋 面粉 ),
甲拥有鸡蛋,乙拥有面粉,但都不肯交出自己手上的东西,导致蛋糕无法做出来。
并行的级别
阻塞
当一个线程进入临界区后,其他线程必须等待
举例:只有一个厕所(临界区),排队上厕所,
必须上一个人上完。下一个才能上。
非阻塞
无障碍
无锁
无障碍 、 保证有一个线程可以胜出
无等待
无锁的、有限步完成、无饥饿
两大定律
阿姆达尔定律
题目一、如果有5个步骤的程序,每个步骤消耗100个时间单位。假设步骤2和步骤5可以完全并行,并且你有无穷多个处理器。那么根据Amdahl加速比是多少?
解答: 3个步骤必须串行,另外两个步骤可以并行,那么串行比例F=3/5;
根据阿姆达尔定律:加速比=1/(F+(1-F)/n),当n趋近无穷大的时候,
加速比=1/F = 1/(3/5) = 5/3 = 1.67,也就是说这种方式的极限加速比是1.67