同步、异步、阻塞、非阻塞
1.同步和异步的区别:
是否有回调。
如:本身去食堂排队买饭是同步,叫外卖是异步。linux
2.阻塞和非阻塞的区别:
是否有辅助线程轮询,把完成结果通知真正用户线程。多线程
若是是用户本身轮询那就叫同步非阻塞,若是是别人帮忙轮询并通知用户线程叫异步非阻塞。
如,10我的去酒吧看世界杯,这时候安排一个服务生盯着电视,其余人都去各类happy,若是球赛开始,服务生会通知你们。这就是非阻塞。
10我的去酒吧看世界杯,若是10我的什么也不干,就这么一直盯着电视等着球赛开始,这就是阻塞。app
如下是转载:异步
同步、异步:函数
一、同步阻塞:spa
老张在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步);线程
二、异步阻塞:blog
老张在厨房用响水壶烧水,一直在厨房中等着(阻塞),直到水壶发出响声(异步),老张知道水烧开了;开发
三、同步非阻塞:回调函数
老张在厨房用普通水壶烧水,在烧水过程当中,就到客厅去看电视(非阻塞),而后时不时去厨房看看水烧开了没 (轮询检查同步结果);
四、异步非阻塞:
老张在厨房用响水壶烧水,在烧水过程当中,就到客厅去看电视(非阻塞),当水壶发出响声(异步),老张就知道 水烧开了。
注意:
一、一般的IO、NIO操做,都是同步的;
二、JDK1.7提供了AIO异步操做的类,如AsynchronousSocketChannel、AsynchronousServerSocketChannel等;
Java也能够经过多线程,在开启的线程中,经过回调方式,实现异步操做。
linux下5中IO模型