【Linux网络】select/poll 和 epoll的深入理解

本文深入探讨了Linux系统中处理客户端大量连接的单线程方式,从用户态和内核态的概念讲起,分析了为何不采用多线程,并详细阐述了select、poll和epoll的机制及其优缺点。 DMA控制器在处理并发连接中的作用,以及文件描述符在系统中的角色得到解释。最后提到了epoll作为更高效的解决方案在实际场景如redis和nginx中的应用。
摘要由CSDN通过智能技术生成

1. 用户态和内核态

1.1 用户态和内核态的概念

内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。

用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。

1.2 用户态切换到内核态的三种方式

  1. 系统调用
  2. 异常
  3. 外围设备的中断

2. 为什么不用多线程?

当客户端连接非常多的时候 多线程进行处理的话 需要CPU上下文切换,处理一些操作句柄。代价很高。

3. 如何用单线程的方式来处理客户端的大量连接呢?

3.1. DMA控制器

在这里插入图片描述
当线程处理A消息时,B上有消息过来,不会造成丢失。因为有DMA控制器。

DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值