zoukankan      html  css  js  c++  java
  • NIO,AIO,BIO

    同步和异步:同步和异步关注的是消息通信机制,

    同步:就是在发出一个“调用”时,在没有得到结果之前,该“调用”就不返回,但是一旦调用返回,就得到返回值了;换句话说:就是由“调用者”主动等待“调用”结果

    异步:“调用”在发出之后,这个调用就直接返回了,所以没有返回结果;换句话说,当一个异步过程调用发生后,调用者不会立刻得到结果,而是在“调用”发生后,“被调用者”
    通过状态,通知来通知调用者,或通过回调函数处理这个调用
    例子:
    你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
    而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。


    阻塞和非阻塞:程序在等待调用结果(消息,返回值)时的状态

    阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
    非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程


    阻塞:当试图对某个文件进行读写时,发现不能够进行读写操作,程序进入等待状态,直到可以进行读写操作为止(充饭费,人太多也只能在后面排队)
    非阻塞: 当试图对某个文件进行读写时,发现不能够进行读写操作,马上返回,不在等待(银行里取款办业务时,领取一张小票,领取完后我们自己可以玩玩手机,当轮我们时,银行的喇叭会通知,这时候我们就可以去了。 )

    老张爱喝茶,废话不说,煮开水。
    出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
    1:老张把水壶放到火上,立等水开。(同步阻塞)
    老张觉得自己有点傻
    2 :老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
    老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
    3 :老张把响水壶放到火上,立等水开。(异步阻塞)
    老张觉得这样傻等意义不大
    4 :老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
    老张觉得自己聪明了。


    所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。
    虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。
    同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。
    所谓阻塞非阻塞,仅仅对于老张而言。
    立等的老张,阻塞;看电视的老张,非阻塞。
    情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。
    所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。




    BIO(Blocking I/O)同步阻塞I/O
    服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以用线程池机制改善。
    做完一件事情再去做另一件事情,一件事情一定要等前一件事情做完,但是在高并发情况下,效率就很低了
    适用于:连接数目比较小且固定的架构,这种方式对服务器资源要求比较高

    NIO(New I/O) 同步非阻塞I/O
    服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到有IO请求时才启动一个线程进行处理;
    适用于:连接数目多且连接比较短(轻操作)的架构,聊天服务器
    AIO(Asynchronous I/O) 异步非阻塞I/O
    服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由OS先完成了再通知服务器去启动线程进行处理
    适用于:连接数目多且比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作

  • 相关阅读:
    win7_64 下redis安装并进行php-redis扩展
    redis 与 memcache 性能测试比较
    前端一班:HTML5当天学习总结-摘抄张果博客园
    Hibernate ORM框架——项目一:Hibernate事务的生命周期,不建议使用openSession而改造
    Hibernate ORM框架——Hibernate查询之Criteria接口、Native SQL 查询、Query接口(批量操作)
    Hibernate ORM框架——Hibernate分页查询and多表查询
    Hibernate ORM框架——项目一:Hibernate查询;项目二:集合相关查询
    Hibernate ORM框架——连接池相关
    Hibernate ORM框架——综合
    Hibernate ORM框架——续第二章:Hibernate映射关系:双向关联
  • 原文地址:https://www.cnblogs.com/miantiaoandrew/p/8176393.html
Copyright © 2011-2022 走看看