图解epoll原理

本文详细介绍了epoll的工作原理,通过对比select的局限性,阐述了epoll如何通过功能分离和就绪列表提升效率,以及epoll在内核中的实现细节,包括eventpoll对象、红黑树索引和双向链表。文章适合对Linux网络编程感兴趣的读者,特别是对高性能服务器开发有需求的程序员。

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

mark

poll翻译过来是轮询的意思, 可以看到poll和epoll都有轮询的过程, 不同点在于:poll轮询的是所有的socket,而epoll只轮询就绪的socket。 epoll是开发linux高性能服务器的必备技术至,epoll本质,是服务端程序员的必须掌握的知识。 本文主要是利用图文讲述了select的原理和epoll相对于做出的优化,以及epoll的部分细节问题。

从硬件理解网卡接收数据过程

下图是一个典型的计算机结构图,计算机由CPU、存储器(内存)、网络接口等部件组成。了解epoll本质的第一步,要从硬件的角度看计算机怎样接收网络数据。 下面这幅图在我的另一篇文章里也用到了,《冯诺依曼架构》

img

网卡收到网线传来的数据,通过硬件电路传输,网卡接收的数据存放到内存中,操作系统就可以去读取它们。

正确理解CPU中断

一般而言,由硬件产生的信号需要CPU立马做出处理,不然数据可能就丢失,所以它的优先级很高。CPU理应中断掉正在执行的程序,去做出响应;当CPU完成对硬件的响应后,再重新执行用户程序。 比如我们按下键盘上的按键,会触发中断即(键盘会给cpu的中断引脚发出一个高电平,CPU能够捕获这个信号,然后执行键盘中断程序。)网卡也是硬件设备,和键盘不同的是我们用键盘可以主动触发中断,而网卡是收到数据之后向CPU发出信号,触发中断程序,即CPU去处理网卡设备的数据!

mark

什么是一切皆文件

在Java的学习中,我们可以有深刻的体会,那就是一切皆对象;在Linux的学习中,一切皆文件的理念无处不在,文档、目录、磁盘驱动器、CD-ROM、调制解调器、键盘、打印机、显示器、终端,甚至是一些进程间通信和网络通信。所有这些资源拥有一个通用的抽象,在Linux中将其称为“文件”,其实Unix就是这种思想,所以Linux也借鉴了这个思想,因为每个“文件”都通过相同的 API 暴露出来,所以你可以使用同一组基本命令来读取和写入磁盘、键盘、文档或网络设备, “一切皆文件”的思想提供了一个强大而简单的抽象,那就是无论是硬件设备、还是网络连接、还是我们日常解除的文件,都是文件,这样使得API的设计可以化繁为简,用户可以使用通用的方式去访问任何资源,自有相应的中间件做好对底层的适配。 所以在Linux操作系统看来,一切都是文件,也就意味着,网卡设备也是文件,Socket连接也是文件,文件的统一抽象使得都有共同的属性,我们这里只谈最重要的文件属性——文件描述符(file descriptor,简写fd)!

mark

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值