终于明白了,一文彻底理解I/O多路复用

本文深入介绍了I/O多路复用的概念,从文件和文件描述符出发,探讨了在高并发场景下如何有效管理多个文件描述符。文章提到了select、poll和epoll等I/O多路复用技术,强调了epoll在解决文件描述符数量限制和效率问题上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇是高性能、高并发系列的第三篇,承接上文《读取文件时,程序经历了什么》,在讲解了进程、线程以及I/O后,我们来到了高并发中又一关键技术,即I/O多路复用。

在讲解该技术之前,我们需要预习一下文件以及文件描述符。

 

什么是文件

程序员使用I/O最终都逃不过文件这个概念。

在Linux世界中文件是一个很简单的概念,作为程序员我们只需要将其理解为一个N byte的序列就可以了:

b1, b2, b3, b4, ....... bN

实际上所有的I/O设备都被抽象为了文件这个概念,一切皆文件,Everything is File,磁盘、网络数据、终端,甚至进程间通信工具管道pipe等都被当做文件对待。

所有的I/O操作也都可以通过文件读写来实现,这一非常优雅的抽象可以让程序员使用一套接口就能对所有外设I/O操作

常用的I/O操作接口一般有以下几类:

  • 打开文件,open

  • 改变读写位置,seek

  • 文件读写,read、write

  • 关闭文件,close

程序员通过这几个接口几乎可以实现所有I/O操作,这就是文件这个概念的强大之处。

 

文件描述符

在上一篇《读取文件时,程序经历了什么》中我们讲到,要想进行I/O读操作,像磁盘数据,我们需要指定一个buff用来装入数据,一般都是这样写的:

read(buff);

但是这里我们忽略了一个关键问题,那就是虽然我们指定了往哪里写数据,但是我们该从哪里读数据呢?

从上一节中我们知道,通过文件这个概念我们能实现几乎所有I/O操作,因此这里少的一个主角就是文件

那么我们一般都怎样使用文件呢?

如果周末你去比较火的餐厅吃饭应该会有体会,一般周末人气高的餐厅都会排队,然后服务员会给你一个排队序号,通过这个序号服务员就能找到你,这里的好处就是服务员无需记住你是谁、你的名字是什么、来自哪里、

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值