同步/异步 | 阻塞/非阻塞理解

同步/异步 阻塞/非阻塞

在谈到这个概念,会涉及到:

  1、同步阻塞
  2、同步非阻塞
  3、异步阻塞
  4、异步非阻塞
关于同步/异步

同步和异步其实指的是,请求发起方对消息结果的获取是主动发起的,还是等被动通知的。如果是请求方主动发起的,一直在等待应答结果(同步阻塞),或者可以先去处理其他的事情,但要不断轮询查看发起的请求是否有应答结果(同步非阻塞 )因为不管如何都要发起方主动获取消息结果,所以形式上还是同步操作。如果是由服务方通知的,也就是请求方发出请求后,要么在一直等待通知(异步阻塞),要么就先去干自己的事了(异步非阻塞),当事情处理完成之后,服务方会主动通知请求方,它的请求已经完成,这就是异步。异步通知的方式一般是通过状态改变,消息通知,或者回调函数来完成,大多数时候采用的都是回调函数。

关于阻塞/非阻塞

阻塞和非阻塞在计算机的世界里面,通常指的是针对IO的操作,如网络IO和磁盘IO等。那么什么是阻塞和非阻塞呢?简单的说就是我们调用了一个函数之后,在等待这个函数返回结果之前,当前的线程是处于挂起状态,还是运行状态,如果是挂起状态,就意味着当前线程什么都不能干,就等着获取结果,这就叫同步阻塞,如果仍然是运行状态,就意味当前线程是可以的继续处理其他任务,但要时不时的去看下是否有结果了,这就是同步非阻塞。

总结

阻塞与非阻塞:描述的是指在客户端发出请求之后的状态,如果一直是处于等待服务端的相应,则是阻塞的;如果发出请求之后继续处理其他业务,则是非阻塞的。
同步与非同步:描述的是在请求发出之后,对于请求结果的获取是客户端主动等待获取,还是由服务端来通知消息结果。如果是客户端主动等待获取则是同步的,如果由服务端来通知结果,则是异步的。

【参考文章】http://baijiahao.baidu.com/s?id=1604983471279587214&wfr=spider&for=pc

你可能感兴趣的:(Java面试)