同步和异步的那些事

目录

1 概述

2 进程同步

2.1 临界区

2.2 互斥锁

2.3 信号量

1 概述

在计算机领域经常会听到同步和异步的概念,首先我们先看下什么是同步和异步。

同步:是指一个进程在执行某个请求的时候,若这个请求没有执行完成, 那么这个进程将会一直等待下去,直到这个请求执行完毕,返回数据(比如1+1=2),才会继续执行下面的请求。

异步:是指一个进程在执行某个请求的时候,如果这个请求没有执行完毕,进程不会等待(但是会返回结果,如果1+1=2,或者是正在计算中),而是继续执行下面的请求。

阻塞:不立即返回结果,期间线程挂起(执行者等待)
非阻塞::立即返回结果(执行者不等待)

 

总结下,同步异步讲的是调用接口数据返回的方式,同步是调用者主动查询,而异步是指被调用者通知调用者数据。阻塞非阻塞讲的是调用者调用接口后是否可以执行其他的任务,阻塞是指调用者调用接口后不可以继续执行其他的任务,非阻塞是指调用接口后可以继续执行其他的任务。

2 进程同步

并发进程之间分为独立关系和交互关系,独立关系的进程分别在自己的变量集合上运行,互不影响;但交互关系的并发进程在执行过程中需要共享或交换数据,因此交互的并发进程之间存在着竞争和协作关系。

Process Synchronization means a mechanism to the consistency of data shared in cooperative process

进程同步是一种维持交互进程之间共享数据一致性的机制。同步的工具:Mutex Lock(互斥锁)和Semaphore(信号量)。

进程本身是相互独立运行的,也就是说是异步的,但是由于进程间的交互,使得进程间一定要保证某种时序关系,因此需要做进程间的同步。

2.1 临界区

进程同步中,当两个进程同时操作共享数据时,如果不加以干涉就会出问题,换言之,我们需要共享数据的进程之间互斥,即以一种手段确保当一个进程在使用共享数据时,其他进程不能做同样的操作。

每个进程中,对共享数据进行访问的程序片段被称为“临界区”。

2.2 互斥锁

操作系统设计人员建立软件工具来解决临界区问题,最简单的工具就是互斥锁

A procss must acquire the lock before entering a critical section

一个进程进入临界区之前必须获取锁

It must release the lock when it exits the critical section

进程在退出临界区时必须释放锁

为什么说互斥锁是硬件的实现方案呢,因为互斥锁需要通过执行TSL指令来获取锁,而TSL指令称为测试并加锁(test and set lock),但它是一个原子操作,由硬件保证原子性,执行TSL指令时,执行该指令的CPU通过硬件锁住内存总线,其他CPU将无法访问内存,直到TSL指令执行完测试并加锁。

2.3 信号量

信号量(Semaphore)是一种比互斥锁更强大的同步工具,它可以提供更高级的方法来同步并发进程。

信号量是由荷兰学者Dijkstra1965年提出的,网络中的链路状态算法也是他提出的。

A semaphore S is an integer variable that,apart from initialization,is accessed only through two standard atomic operations: P(proberen in dutch 测试) and V(verhogen in dutch 增加)

信号量S是一个整数,除了初始化之外,只能通过两个标准的原子操作P和V访问

P:wait() operation 等待操作

V:signal() operation 信号操作

第一种,二值信号量的值只能是0或1,通常将其初始化为1(S=1),用于实现互斥锁的功能。

第二种, 一般信号量的取值可以是任意数值(S > 1),用于控制并发进程对共享资源的访问

例子:有个Y字型的交通路口,其中主干道的车要进入两个小路,而每条小路上最多只能有一辆车行驶。

假设现在有三辆车Car1、Car2、Car3都到达了Y字型路口,信号量road表示小路的数量,首先Car1通过P操作,将road减一,并进入了小路,此时road=1,还有一条小路可以用;

Car2也通过P操作,再将road减一,并进入小路,此时road=0,没有小路可用了;

当轮到Car3的时候,由于此时road=0,执行P操作的时候,进入到了空循环进行忙式等待(自旋);

过了一段时间,Car1驶出了其中一条小路,并对信号量进行V操作,通过Car1的V操作,此时road=1,Car3在P操作中再次循环的时候就退出循环,将road减一,然后进入到小路。

×

猜你喜欢

转载自blog.csdn.net/daida2008/article/details/124654916