美文网首页
同步异步阻塞非阻塞(转)

同步异步阻塞非阻塞(转)

作者: 屎倒淋头还嚼便 | 来源:发表于2019-04-28 19:58 被阅读0次

出自:https://baijiahao.baidu.com/s?id=1612594086537323804&wfr=spider&for=pc

阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作。

同步/异步:数据如果尚未就绪,是否需要等待数据结果。

java中阻塞非阻塞,大概都指的是线程。

一、同步:

同步这个词在很多场合下都会被使用,如果单从字面意思来看:相同的步骤。但是在编程的领域里讲,字面意思就不那么准确了。

对于编程领域来说,同步就是发起一个请求,直到请求返回结果之后,才进行下一步操作。简单来说,同步就是必须一件事一件事的做,等前一件做完了,才能做下一件事。

例子:此种模式很常见,比如我发起一个网络请求查询一个人的身份证,然后根据身份证查看这个人的详细信息。那么我查询详细信息的操作需要等待查询身份证的操作,那么此时查询身份证的操作就是一个同步操作。

二、异步:

异步很明显是与同步相对,二者的区别在于是否需要等待某操作的返回结果。简单来说,我们还是一个网络请求,如果我们此时不需要依赖这个请求的结果就能进行后续操作,那么此时这个网络请求就是一个异步操作。

当一个异步操作发出后,调用者在没有得到结果之前,可以继续执行后续操作。这就是异步。

同步和异步的区别:

二者的区别还是很明显的:请求发出后,是否需要等待请求结果,才能继续执行其他操作。

三、阻塞

阻塞的概念往往伴随着线程。阻塞一般是指:在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作。

四、非阻塞

那么非阻塞,毫无疑问是阻塞的反向操作。非阻塞式的调用指:在结果没有返回之前,该调用不会阻塞住当前线程。

是不是感觉阻塞/非阻塞和同步/异步有异曲同工的地方?

其实,这两者存在本质的区别,面向的对象是不同的。

阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作。同步/异步:数据如果尚未就绪,是否需要等待数据结果。

相关文章

网友评论

      本文标题:同步异步阻塞非阻塞(转)

      本文链接:https://www.haomeiwen.com/subject/sybjnqtx.html