单线程I/O多路复用

最近用到redis中间件,稍微了解了一下,发现redis采用多路复用机制。趁此机会,复习一下单线程的I/O多路复用。顺便扩展一下同步和异步阻塞和非阻塞

同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。

阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成

一、IO多路复用

IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数可以避免同步非阻塞IO模型中轮询等待的问题
在这里插入图片描述
用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。

从流程上来看,使用s

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于多进程、I/O多路复用和libevent开发服务器端有各自的优点和缺点,下面进行比较: 优点: 1. 多进程模型的优点: - 简单易用:多进程模型相对于多线程模型来说,编程更简单,容易理解和维护。 - 隔离性好:每个子进程都有独立的内存空间,进程之间不会相互影响。 - 可靠性高:一个子进程崩溃不会影响其他子进程的正常运行。 2. I/O多路复用的优点: - 高效性:通过使用I/O多路复用技术,可以同时监听多个文件描述符的可读/可写事件,减少系统调用的次数,提高服务器的性能。 - 节省资源:相比多线程或多进程模型,使用I/O多路复用可以减少线程或进程的创建和管理,从而节省系统资源。 - 简化编程:使用I/O多路复用可以简化服务器端的编程过程,减少编码工作量。 3. libevent库的优点: - 封装底层细节:libevent提供了对底层I/O多路复用机制的封装,屏蔽了不同操作系统之间的差异,让开发者能够更专注于业务逻辑的实现。 - 异步事件处理:libevent支持异步事件处理,能够处理大量的并发连接,并且能够高效地响应事件。 - 跨平台支持:libevent支持多个操作系统,可以在不同的平台上进行开发和部署。 缺点: 1. 多进程模型的缺点: - 资源消耗:每个子进程都需要占用一定的系统资源,包括内存和CPU资源。 - 进程间通信复杂:多进程模型需要进行进程间的通信和同步,这增加了编程的复杂性。 2. I/O多路复用的缺点: - 编程复杂性:相比于单线程模型,使用I/O多路复用需要更多的编程工作,对于初学者来说可能会有一定的学习曲线。 - 可读性降低:由于事件驱动的特性,代码逻辑可能会分散在多个事件回调函数中,可读性可能会降低。 3. libevent库的缺点: - 学习成本:使用libevent需要学习其提供的接口和使用方法,对于不熟悉的开发者来说可能需要一定时间来适应。 - 依赖性:使用libevent需要将其集成到项目中,可能会增加项目的依赖关系。 综上所述,基于多进程、I/O多路复用和libevent开发服务器端的优点是简单易用、高效节省资源、提供了高并发和跨平台支持。而缺点是资源消耗较大、编程复杂性较高、使用libevent需要学习和依赖。根据具体的应用场景和需求,选择合适的技术方案来开发服务器端。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值