epoll_wait 中的 epoll 事件顺序

2023-12-23

我已将一个程序从 select 移植到 epoll,以增加我们可以处理的套接字数量。我已经将socket添加到epoll FD中并且可以愉快地读写了。

但是,即使我使用级别触发事件,我也担心套接字可能会饥饿。我担心的情况是,准备好的套接字数量多于epoll_event结构。我知道下次我打电话的时候epoll_wait它会给我其余的人,但我想知道我将他们按什么顺序排列,以考虑到上次和这次没有晋级的人。

一个例子: 假设我连接了 10 个套接字并将其添加到epollFD。我的内存只够 5 个epoll_event结构。让我们假设在每个之间的时间epoll_wait,所有 10 个套接字都接收数据。首先epoll_wait将返回 5epoll_event用于处理的结构,假设它是套接字 1-5。我处理这 5 个套接字,当我这样做时,更多的数据进来,所有 10 个套接字都有更多的数据需要读取。我输入epoll_wait再次获得 5 个以上epoll_event结构。

我的问题是第二次调用时我会得到哪 5 个套接字epoll_wait。是否是套接字 1-5,因为它们已添加到epoll先FD?或者我会得到套接字 6-10,因为这些事件是在更多数据进入套接字 1-5 之前引发的?

本质上,是epoll_wait就像 FIFO 队列一样,还是只是扫描内部套接字列表(从而优先考虑列表中的第一个套接字)。

编辑: 这是Linux内核v4.9.62


@jxh 关于该行为的观察是正确的,并且该行为早已确立(并且最初是有意的,如果我正确地记得我多年前与实施者 Davide Libenzi 的电子邮件对话)。不幸的是,迄今为止它还没有被记录下来。但是,我已经在即将发布的手册页版本中修复了这个问题,其中epoll_等待(2) http://man7.org/linux/man-pages/man2/epoll_wait.2.html将携带文本:

如果超过最大事件数文件描述符准备就绪时epoll_wait()被调用,然后连续epoll_wait()来电将会 循环遍历一组就绪的文件描述符。这 行为有助于避免进程失败的饥饿情况 注意到额外的文件描述符已经准备好了,因为它 重点关注一组已知的文件描述符 准备好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

epoll_wait 中的 epoll 事件顺序 的相关文章

  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • Python 相当于 Bit Twiddling Hacks 中的 C 代码?

    我有一个位计数方法 我正在尝试尽可能快地实现 我想尝试下面的算法位摆弄黑客 http graphics stanford edu seander bithacks html CountBitsSetParallel 但我不知道 C 什么是
  • 在 T4 代码生成中,如何从引用的程序集中获取类型?

    由于 T4 在项目上下文之外运行 因此我无权访问当前程序集或其他程序集 如何注册对引用程序集的访问 然后从中获取类型 我猜您想访问项目中建筑物的程序集 我在下面的示例代码中所做的是将一个名为 TestLib 的项目添加到我的解决方案中 我将
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • C# SignalR 异常 - 连接在收到调用结果之前开始重新连接

    我正在开发 2 个应用程序 第一个是 C 控制台应用程序 另一个是 Asp net Web 应用程序 我正在使用 SignalR 连接两者 这是我的 C 控制台应用程序 客户端 public class RoboHub public sta
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 从 cin 读取整数序列并将它们存储在向量中

    这就是我读取整数的方法std cin并将它们存储在向量中 int number vector
  • 什么是 C++11 扩展 [-Wc++11-extensions]

    我需要一些帮助来了解此错误发生的位置 警告 非静态数据成员的类内初始化是 C 11 扩展 Wc 11 extensions 这是它来自的代码部分 typedef struct Hand bool straight false bool fl
  • 来自用户定义文字的整数字符序列,以字符串作为参数

    目前 只有双精度数可以在用户定义的文字中生成字符模板 template
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • 智能感知不显示评论

    如果我在 Visual Studio 2010 中输入类似的内容数据集1 我得到所有可用方法和属性的列表 智能感知 这很好用 但是 如果我在此列表中选择一个方法或属性 我不会得到 if 的描述 例如 如果我有类似的东西 public cla
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int

随机推荐

  • 如何使用 Webpack 设置 React 组件的私有共享库

    我在多个 Webpack 项目中使用了许多 React 组件 我想通过 NPM 共享它们 所以我很自然地 将这些组件放入 私有 GitHub 存储库中 将该存储库添加到主项目中package json 为了能够同时在组件库上进行开发 我使用
  • HTML 下载和文本提取

    下载 URL 列表并仅提取文本内容的好工具或工具集是什么 不需要蜘蛛 但可以控制下载文件名 并且线程将是一个额外的好处 平台是linux wget http linux die net man 1 wget html2ascii http
  • 创建 CA 证书的 x.509 V3 扩展基本约束和密钥用法有什么区别?

    这两个动作似乎做了同样的事情 使用基本约束X 509 证书中的扩展名以表明它是 CA 证书 并且 使用按键用法扩展名例如表示公钥可用于证书签名 这些扩展有什么区别 它们是否有相同的目的或相辅相成 密钥用法 定义了可以使用证书中包含的密钥执行
  • Postgres pg_dump 缓存查找索引失败

    我正在尝试使用以下命令创建 postgres 数据库的备份 省略详细信息 pg dump h host p 5432 U user db gt db sql 一段时间后 我收到错误 已格式化 pg dump archiver db quer
  • 启动期间生成的 ELF 可执行文件段错误

    我正在生成一个 ELF 可执行文件 并将 text 部分加载到 LOAD 段中 它可以很好地拆卸 但尝试在下面运行它gdb gives During startup program terminated with signal SIGSEG
  • 如何在CSS中设置超细“font-weight”(小于100)?

    我想让文字超细 小于 font weight 100 这可以用 CSS 来做吗 Like this but with helvetica 处理 Web 字体时 CSS 字体粗细不会 使字体变细 或加粗 对于未从 url 加载的字体font
  • XML 序列化问题 - 如何序列化一个对象中的元素、属性和文本

    我是使用 NET 进行 XML 序列化的新手 在使用它一段时间后 我现在感到很困惑 我可以序列化具有包含其他元素的属性的元素 但如何序列化类似的内容
  • lodash:使用不同的对象数组过滤对象数组

    这个问题具体针对lodash https lodash com docs 给定两个对象数组 什么是best way用另一个数组的对象过滤一个数组 我试图提出下面的一个场景 我这样做的方法是使用两个 forEach循环 但我想知道使用 lod
  • 在 C# 中根据引用的 XSD 验证 XML

    我有一个具有指定架构位置的 XML 文件 如下所示 xsi schemaLocation someurl localSchemaPath xsd 我想用 C 进行验证 当我打开文件时 Visual Studio 会根据架构验证它并完美列出错
  • SAM 无需重建即可运行

    我已经开始使用AWS SAM for python 在本地测试我的功能时 我运行 sam build use container sam local start api You can now browse to the above end
  • 支持词法范围 ScriptBlock 参数(例如Where-Object)

    考虑以下任意函数和测试用例 Function Foo MyBar Param Parameter Mandatory false ScriptBlock Filter if Filter Filter true Filter Filter
  • 默认 MaxPoolingOp 仅在使用从 GPU 移植的训练模型时在设备类型 CPU 错误上支持 NHWC

    我使用 python keras 和 tensorflow 在 PC 上开发并训练了一个模型 并使用 GPU 运行预测等 一切正常 然后 我将模型和预测代码转移到笔记本电脑上 并使用requirements txt重建环境 将gpu包交换为
  • 在 Servlet 中使用 Bean

    我有一个 jsp 页面 index jsp 其中包含两个文本字段用户名和密码的表单
  • 我如何学习设计这样的用户界面?

    我最近在使用该应用程序Secret https www secret ly 并正在观察它拥有的令人惊叹的用户界面 如果您正在打开 Secret 的网页 请向下滚动一点以查看 UI 作为一个Android新手 想学习的人 我想问一下这个UI是
  • 如何使用 PagingAndSortingRepository 不返回特定列

    我知道标题可能听起来有点令人困惑 但我不知道如何在标题上总结我的问题 我的主要问题是我不想使用 PagingAndSortingRepository 返回特定列 想象一下以下场景 我有两个实体 一个称为 用户 Entity Table na
  • 阻止直到按下按键或一天中的给定时间

    如何阻止直到 1 按键或 2 之前输入的一天中的时间 以较早者为准 hh mm格式已达到 我正在使用 Windows 以防万一 这DOS汇编程序 http www robvanderwoude com downloads batchman
  • Android Bundle 简单单元测试不起作用

    我对 android 很陌生 并试图了解捆绑包的工作原理 我被以下单元测试阻止 有人可以解释一下为什么失败吗 Test public void testBundle throws Exception Bundle bundle new Bu
  • 当“react-native run-ios”时端口 8081 已被使用

    是的 我已经读过这篇文章 但仍然不知道如何使其发挥作用 反应本机 端口 8081 已在使用中 打包器未运行或未正确运行命令 bin sh 失败 退出代码为 2 https stackoverflow com questions 302164
  • ES6 标记模板实用性

    我了解ES6的语法标记模板 https developer mozilla org en US docs Web JavaScript Reference template strings Tagged template strings 我
  • epoll_wait 中的 epoll 事件顺序

    我已将一个程序从 select 移植到 epoll 以增加我们可以处理的套接字数量 我已经将socket添加到epoll FD中并且可以愉快地读写了 但是 即使我使用级别触发事件 我也担心套接字可能会饥饿 我担心的情况是 准备好的套接字数量