IO分类

分类

IO的分类,从两个角度可以分为:阻塞/非阻塞 & 同步/异步。如果进行细分,可以衍生出4种组合:同步阻塞、异步非阻塞….通常很少有人会去细究,阻塞和同步也是混着叫。本次总结基本就是要扣细节。

要想分得清,得明白这两种分类是对什么分的类,分类依据是什么。

分类分类对象分类依据
阻塞/非阻塞IO接口是否需要等待底层数据接收完毕
同步/异步用户程序工作模型是否等待数据读写完毕

说明

按照上述分类,逐层分析。

1. IO接口

accept,阻塞;
recv/send,阻塞;
select,非阻塞。利用select我们就可以大大提高并发度,将连接处理线程和数据处理线程分开,实现并发。
epoll,非阻塞,相比于select,更加便捷的接口,同时可以将建立好的连接加入epoll中进行侦听,工作线程无需无限循环读取数据;

2. 用户程序模型

为了充分利用系统资源,提高并发度。我们通常采用上面提到的编程模型,尽量将连接事件处理、数据接收发送、数据处理这几个部分划分到不同的线程中去。不同处理不用等待下一步完成就可以继续执行。这就是异步。

3. 四种组合

通过上面的总结,继续将4种组合掰扯清楚:

类型说明
同步阻塞采用类似accept的接口阻塞等待连接事件后,顺序进行数据接收和数据处理,然后response
同步非阻塞采用类似select等非阻塞接口处理连接事件,顺序进行数据接收和数据处理后response,可以实现并发,但是有很大改善空间
异步阻塞采用类似accept的接口阻塞等待连接事件后,在工作线程处理数据接收和逻辑处理,再response
异步非阻塞采用类似select等非阻塞接口处理连接事件,在工作线程处理数据接收和逻辑处理,再response

通常,我们会采用epoll+ 线程池,让工作线程不用死等数据,有数据了才去找个线程处理数据。这样的异步非阻塞模型,更加的高效。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值