同步,异步,阻塞,非阻塞

说说我对这四个概念的理解吧!

这四个概念十分的抽象,我迷迷糊糊的见过很多次,但是一直理解的不是很好,这里写篇文章作为总结!

1首先,这四个概念可以组合出下面四个新的概念:

同步阻塞方式;

同步非阻塞方式;

异步阻塞方式;

异步非阻塞方式;

先记住会衍生这么四个概念,后面会详细的区别这四个概念。

2.同步/异步是进程级的概念,阻塞/非阻塞是内核级的概念

这个怎么理解呢?前者同步/异步我们见的很多,说异步一般都是在进程有多个线程时候说的,所以有:我们说同步/异步都是站在进程工作模式的角度上说的,即对于一个进程而言,如果在一个时刻,这个进程只能从头到尾做一件事,然后再去做另一件事,那么这个进程是同步的,相反,如果这个进程可以在一个时刻同时(活交叉轮流)处理这两个事情,那么是异步进行的。当然,不限定于只有两件事情的,多件事情也一样。

按照上面的理解,同步/异步就是进程处理事务是否有并行性。这两种方式不能说谁好谁坏,他们适用的场景不一样,比如说对执行时间高要求的场景中,你就应该用同步,异步的时间是没有保证的。

理解阻塞/非阻塞要抓中,参与者已经从进程(线程)增加到进程和内核调用了。也就是说单单的进程是没有阻塞/非阻塞的说法的,当进程发生“调用”的时候才会有阻塞和非阻塞(注意,这里我没有说明进程的数目)。为了利于说明阻塞/非阻塞这两个概念,从这里开始说的进程是同步的。当一个进程调用内核I/O时,如果进程必须等待系统返回I/O结果,那么这种工作方式是阻塞的,如果进程不要等待系统返回的I.O结果就继续往下执行,那么这种工作方式是非阻塞的。

按照上面的阐述,阻塞/非阻塞就是A对B的调用,A是要等到B完成调用还是不等就直接往下执行的两种工作模式。同样,阻塞/非阻塞也没有谁好谁坏的,他们得使用场景不同,比如数据耦合性很强的环境中,下一步的执行严重依赖于上一个I/O时就应该使用阻塞式的。

3.同步阻塞/同步非阻塞,异步阻塞/异步非阻塞

好,按照“同步/异步就是进程处理事务是否有并行性”,可以知道同步环境下,进程对线程的阻塞调用和非阻塞调用才有了同步阻塞/同步非阻塞两种工作模式。因为同步模式下进程只有一个,所以其采用阻塞还是飞阻塞的方式本质上没有什么区别,实际运用中“同步非阻塞”用的较少。

在说阻塞/非阻塞的区别时,有强调“(注意,这里我没有说明进程的数目)”,这个进程数目是很关键的东西,当一个进程有多个线程时,那么这些线程是异步的,这也就是我们常说的“线程是实现异步的一种方式”。在多线程的模式下,每个线程异步执行,当这些线程调用内核时,采用阻塞方式和非阻塞方式就出现了“异步阻塞/异步非阻塞”两种模式了。

好了,上面的阐述算是我个人的理解。这里总结下,理解同步/异步的关键是抓住一个进程在一个时刻里面能做多少件事;理解阻塞/非阻塞的关键是抓住参与者有进程和调用,他们之间的调用方式就是阻塞/非阻塞了。

另:

上面出现的进程,就是一个进程,而线程则是一个进程含有多个线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值