同步/异步、阻塞/非阻塞


bio 针对客户端的每次请求,开启一个线程,如果网络很慢这个线程会阻塞在输入流/输出流的读写上;(unix io模型: select、poll)
nio 客户端的请求会通过通道的形式注册到选择器上,选择器会轮询已经注册的通道状态,如果是可读则去处理,
  没有线程会阻塞在网络等待上,数据准备好了才有线程才会去处理;(unix io模型: epoll)
aio 客户端的请求服务端不会主动关心IO的具体情况,什么时候可读,什么时候写,而是绑定一个钩子方法
  当IO可读的时候,则执行对应的方法;(windows是iocp ,linux还是epoll)

总结:
阻塞/非阻塞:就是程序需不需要等待网络传输
同步/异步: 程序是不是需要主动过问资源的状态,对应的状态就绪之后会做相应的处理;
而异步的态度是我不过问资源是不是就绪好,告诉系统如果就绪好了就执行某些动作
这种方式不适合那种前置条件的场景,并且有后续处理的那种。

 

参考: http://simplelife.blog.51cto.com/9954761/1871129 

posted on 2016-03-31 15:50  豆沙包没有肉  阅读(102)  评论(0编辑  收藏  举报

导航