C++中的多路转接技术之epoll


epoll 是 Linux 内核提供的一种高效的 I/O 事件通知机制,常用于网络编程中以替代传统的 selectpoll 系统调用。相比于 selectpollepoll 在处理大量并发连接时具有更高的性能和更好的扩展性。

按照man手册的说法: 是为处理大批量句柄而作了改进的poll.

它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44)

它几乎具备了之前poll的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法

epoll 是干什么的?

  1. 监控多个连接epoll 能帮你同时监控很多网络连接,就像一个超级接线员能同时管理很多电话线路一样。它能告诉你哪些连接上有新消息需要处理,哪些连接被挂断了,等等。
  2. 高效通知:传统的 selectpoll 像是老式的接线员,每次都要检查所有的电话线路才能告诉你哪些线路有事。而 epoll 就聪明多了,它只会告诉你那些有变化的线路,大大提高了效率。
  3. 处理大量连接:如果你有上千个网络连接,epoll 能轻松应对。它的效率不会随着连接数量的增加而明显降低,因为它只关注那些真正有事情发生的连接。
举个简单的例子

假设你在经营一个餐厅,你需要管理很多外卖订单,epoll 就像是一个超级助理,帮你监控所有的订单系统,让你知道什么时候有新订单,什么时候订单完成,什么时候客户取消订单。它只会告诉你有变化的订单,而不是每次都汇报所有的订单状态,这样你就可以专注于处理重要的事情,而不用被不必要的信息干扰。

epoll的相关系统调用

epoll 有3个相关的系统调用.

epoll_create和epoll_create1
int epoll_create(int size);

创建一个epoll的句柄.

自从linux2.6.8之后,size参数是被忽略的.

用完之后, 必须调用close()关闭.

int epoll_create1(int flags);
  • flags:可以是以下值之一:
    • 0:不设置任何标志。
    • EPOLL_CLOEXEC:在返回的文件描述符上设置 FD_CLOEXEC 标志,这意味着当调用 exec 函数时,这个文件描述符会自动关闭。

返回值:成功时返回一个 epoll 实例的文件描述符,失败时返回 -1 并设置 errno。

区别
  1. 参数含义
  • epoll_create 需要一个整数参数 size,但这个参数在现代 Linux 内核中已经被忽略了。
  • epoll_create1 需要一个标志参数 flags,可以设置为 0EPOLL_CLOEXEC
  1. 功能
  • epoll_create 是老版本的接口,参数 size
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值