并发概述
- 并发
同一时间,多个进程,一个CPU执行。
- 并行
同一时间,多个进程,多个CPU执行。
- 竞争条件
//起因: 按顺序执行的代码未按顺序执行。
//解决并发问题错误方向:延时。
//正确方向:正确逻辑。
- 原子性
- 含义:在某一运行环境中不可分割或不可中断。
- 含义(放上下文里理解):在某个上下文不可分割或不可中断,就是原子性的操作。
- 内存访问同步
- 某一内存资源被多个g引用,引发不确定性。(注:g是grouting的简写,可以理解为一个进程。实际是一个轻量级的线程。)
- 引发新概念:临界区:被多个g引用的资源和锁:对临界区加锁限制进入临界区资源的操作者数量。
- 锁可以缩小临界区的不确定性(不知道多个g谁会抢占临界区资源),但影响并发性能。
- 死锁、活锁、饥饿
- 死锁
//死锁含义:所有g互相等待或阻塞。 //触发死锁因素(Coffman): // 1.相互排斥:多g同时独占一个资源。 // 2.等待条件:多个g同时拥有一个资源,等待额外的资源。 // 3.没有抢占:资源只能被单个g释放。 // 4.循环等待:g1等多个g,多个g等g1。
- 活锁
// 相向而行的行人互相向各自向反方向让行。多g无法推进程序状态。