epoll在多线程中的应用-EPOLLEXCLUSIVE和REUSEPORT(一)

本文探讨了在多线程环境下使用epoll时遇到的file descriptor和kernel file description生命周期问题,以及特定TCP listen fd的accept问题。文章分析了EPOLLEXCLUSIVE和SO_REUSEPORT选项如何解决惊群效应,提升多核环境下Web服务器的性能,并讨论了它们的优缺点和使用场景。
摘要由CSDN通过智能技术生成

以下均为对epoll多线程中的使用的一些笔记,如果有不对的地方,烦请指出

主要对于我所遇到的问题进行讨论,不会讨论代码如何改写,探讨如何解决这个问题

一.引言

这些问题均是我在编写我的Web服务器遇到的,我在编写多线程Web服务器的时候,思考如何利用多核的优势来编写Web服务器.在学习了muduo网络库之后,我的先前一个版本的Web服务器采用这种方式,一个master线程+多个工人线程,但是我觉得在高并发的情况下只有一个线程可以accept这无疑限制了accept吞吐量,并不算利用多核优势.进而引发了我对于在多线程中如何高效合理的使用epoll有了探索.

二.epoll file descriptor 和 kernel file description 生命周期的问题

`谈及这个问题,我们需要了解
  • (1) 进程维护file descriptor表 ,每个fd包含
  • fd 标志
  • 指向内核的file descriptor表象的指针
  • (2)内核维护所有打开文件的file description表,每一个表都包含文件的状态标志
  • 当前文件的offest
  • 文件状态标志(读,写,阻塞,非阻塞)
  • 指向该文件v节点

每个进程的task_struct 包含了用于完全应该工作的成员

struct task_struct {
   
	//文件系统信息
	int link_count , total_link_count;
	---
	struct files_struct * files; //打开的文件信息
	---
}

struct files_struct {
   

	-----
	atomic_t count
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值