并发的必知概念
2021-04-15 本文已影响0人
c_gentle
程序、进程与线程
程序是静态的概念,windows下通常指exe文件。
进程是动态的概念,是程序在运行状态,进程说明程序在内存中的边界。(进程是互不干扰的,比如开启两个记事本,这就是两个进程,这两个记事本的进程并不互相影响,可以分别进行记录)
线程是进程内的一个“基本任务”,每个线程都有自己的功能,是cpu分配和调度的基本单位。
并行 和并发
并行是多个指线程一起执行
并发是指多个线程交替执行
如下图
并发与并行.png
同步和异步
同步是指当当前任务没有执行完成,不能进行下一个任务
异步是指当前任务尚未完成,但是处于空档期,可以去执行其他任务
image.png
临界区
临界区用来表示一种公共资源与共享数据,可以被多
个线程使用。
同一时间只能有一个线程访问临界区(阻塞状态),
其他资源必须等待。
死锁、饥饿、活锁
死锁是指多个线程互相在运行过程中相互竞争某正资源,而处于僵持状态。
饥饿是指线程具有优先级的特性,某些线程可能因为优先级问题,而拿不到资源,处于饥饿状态
活锁是指多个线程互相谦让而处于阻塞状态,这就相当于两个在走廊相遇的人:甲向他自己的左边靠想让乙过去,而乙向他的右边靠想让甲过去。可见他们阻塞了对方。甲向他的右边靠,而乙向他的左边靠,他们还是阻塞了对方。
image.png
线程安全
在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。