标签:
同步 异步
阻塞 非阻塞
如上两个概念比较容易混淆, 而且实际情况来看二者有时效果相似, 最主要的相似点就是不需要等别人, 下面简单总结下自己的认识
同步和异步
同步和异步是指发起一个服务调用时,是否需要等待调用对象的执行结果. 服务调用分为 [发送命令,调用执行,读取结果 ]
如果需要等待调用对象执行完毕后把结果返回给调用者, 这样就是同步的模式
如果A调用一个服务B, A不需要等B的结果返回就直接返回做其他事情, A只需要发送命令, 等B调用执行完毕后通知A进行 读取结果, 这样是异步的
阻塞和非阻塞的概念
二者仅仅是针对I/O操作而言的, 也就是仅仅针对如上步骤中的读取结果而言的,
阻塞就是io数据没有ready的时候线程就暂停等待
非阻塞就是io数据没有ready时候我立即返回,并且配合轮询重试来完成读取.
上面两组概念唯一的不同是所描述的问题场景的粒度不同, 同步可以适用在各种上层次的服务调用, 阻塞只适用在最细粒度的io读写,
如果说把io读写也看做一个服务调用, 那么二者没有什么太大区别.
正是因为二者所解决的问题粒度不同, 而本质上是相似的, 所以才会容易混淆, 所以一句话: 涉及到io调用,那么就是阻塞概念,涉及到上层的服务调用,那就用同步和异步
这里仅仅是根据目前的理解发布的拙见, 如果有理解严重错误, 请高手不吝指教.
标签:
原文地址:http://blog.csdn.net/kissmile/article/details/46515027