同步异步&阻塞非阻塞

2019-03-04 update:

同步/异步: 区别在于,同步是需要线程去主动查询,或者等待接收响应,此为同步,异步则线程发起请求后,由内核通知处理,此为异步

阻塞/非阻塞: 区别在于,线程在请求后,如果是一直阻塞,不能干其他事情,此为阻塞,如果可以做其他事情,此为异步.

关于NIO: NIO,jdk1.7是同步非阻塞,这里的同步指的是,selector需要主动查询轮询结果,所以此为同步,非阻塞指的是,selector不会一直被阻塞着等待数据返回,而是请求后,可以去处理下一个请求。

Java NIO 到底是异步还是同步,阻塞还是非阻塞

同步非阻塞,同步体现在 selector 仍然要去轮循判断 channel 是否准备好,非阻塞体现在这个过程中处理线程不会一直在等待,可以去做其他的事情。

同步异步关注点是你问内核数据有没有准备好,还是内核主动通知你数据有没有准备好。阻塞非阻塞关注点是你的处理线程在数据没有准备好的时候是一直在等待状态还是可以去做其他的事情。

同步&异步

需要站在宏观的角度来看

同步:比如请求某个服务,是请求后只能等待或者主动轮询,不能继续下一件事。

异步:请求后可以做其他事情,异步回调通知

阻塞和非阻塞

阻塞:不能做其他事情,只能一直等待。

非阻塞:可以做其他事情。