IO复用模型

进程与线程的描述

一个进程至少会创建一个线程,多个线程共享一个程序进程的内存。程序的运行最终是靠线程来完成操作的。线程的数量跟CPU核数有关,一个核最多能发出两个线程。线程的操作主要分为:一:给CPU进行程序命令的执行。二:IO的操作(读取或输出数据)或者请求网络数据。

IO复用形成原因

如果一个I/O流进来,我们就开启一个进程处理这个I/O流。那么假设现在有一百万个I/O流进来,那我们就需要开启一百万个进程一一对应处理这些I/O流(——这就是传统意义下的多进程并发处理)。思考一下,一百万个进程,你的CPU占有率会多高,这个实现方式及其的不合理。所以人们提出了I/O多路复用这个模型,一个线程,通过记录I/O流的状态来同时管理多个I/O,可以提高服务器的吞吐能力

IO模型

阻塞IO模型

 非阻塞IO模型

 
 IO复用模型

 信号驱动式IO模型

 异步IO模型

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常见的网络IO复用模型有select、poll和epoll。 1. select模型:select函数监视多个文件描述符,当某个文件描述符就绪(一般是读写操作准备就绪)时,select函数返回,程序可以进行相应的IO操作。但是,select模型有一些缺点,如每次调用select时需要将文件描述符集合从用户态拷贝到内核态,当文件描述符数量增大时,这种拷贝会消耗大量的CPU时间,并且select支持的文件描述符数量受限。 2. poll模型:poll函数与select函数的作用相同,但是poll模型解决了select模型的一些问题。poll模型没有最大文件描述符数量的限制,并且不需要将文件描述符集合从用户态拷贝到内核态,因此效率更高。 3. epoll模型:epoll是Linux内核中实现的一种高效的IO复用机制,它采用了事件驱动的方式,当某个文件描述符就绪时,内核会通知应用程序,而不是像select和poll那样需要轮询文件描述符。epoll模型可以处理大量的文件描述符,并且具有更高的效率和更好的扩展性。 它们之间的异同主要有: 1. select和poll模型采用轮询的方式,而epoll模型采用事件驱动的方式,效率更高。 2. select和poll模型需要将文件描述符集合从用户态拷贝到内核态,而epoll模型不需要,因此效率更高。 3. select模型对文件描述符数量有限制,而poll和epoll模型没有限制。 总的来说,epoll模型是目前最常用的网络IO复用技术,它具有更高的效率和更好的扩展性,但是在一些情况下,select和poll模型也可以满足需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值