IO模型理解

IO模型

  • 同步IO模型
    • 同步阻塞(BIO)
      1. 服务端采用单线程,当接收到一个请求后,在该请求没有处理完成时不处理其他请求.
      2. 例如: 公园的检票口,只有一个检票员,在游客检票完成之前不会对其他游客检票.(同一时间只对一名游客检票)
      3. 服务端采用多线程,当接收到一个请求后,开启线程进行处理,这样可以达到并发,但是当用户量大了后会占用资源.
      4. 例如: 公园的检票口,没来一个游客就增加一个新的检票员,对游客进行检票.(对于大量的检票员就会造成一种浪费)
    • 同步非阻塞(NIO)
      1. 服务端接收一个请求后,统一加入到请求集合中,每次轮询一遍集合,对有数据的进行处理,没有则返回错误.
      2. 例如: 公园检票口,将所有游客组成队列进行排队,然后依次询问游客是否有购票.如果有购票则进行检票处理,没有则警告,依次一个个的问下去.
    • IO多路复用
      1. 服务端采用单线程通过select/epool等系统调用获取请求列表,遍历有事件的请求进行处理.
      2. 例如: 公园检票口,将所有游客进行事件注册(告知游客操作流程-先买票,再检票).检票员对已经买票的游客进行检票(来一个处理一个)
    • 信号驱动IO
      1. 信号驱动I/O 模式下,内核在操作可以被操作的时候通知给我们的应用程序发送SIGIO 消息
  • 异步IO模型
    1. 异步I/O 模式下,内核在所有的操作都已经被内核操作结束之后才会通知我们的应用程序
    • Linux(AIO)
    • windows(IOCP)


评论 0

发表评论

Top