问题标签 [epoll]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1270 浏览

c - 边缘触发模式下来自 epolled、非阻塞套接字的 recv

谁能给我一个边缘触发模式下的非阻塞套接字的例子recvepoll?我问是因为我有一些麻烦。

0 投票
3 回答
1996 浏览

c - 为事件驱动的应用程序选择 IPC 解决方案

我目前正在研究一个相当大的单线程、基于事件的应用程序,该应用程序围绕 Linux 下的 epoll 和其他平台下的类似技术设计。目前,每当我们希望两个实例进行通信时,它们通常通过套接字进行,无论它们是否在同一台机器上运行。出于性能原因,我设想使用某种形式的 IPC 来加速同一台机器的通信。现在,我需要决定使用哪种 IPC 机制。

以下因素对我很重要:

  • 事件驱动,没有完全重新设计——如果 IPC 机制不能很好地适应 epoll,那几个月的工作对我来说就白费了
  • 快——如果这个机制不比套接字快,那么不值得花时间去实现它
  • 在执行过程中灵活且(重新)可配置——我相信这排除了 MPI & al
  • 不需要多线程。

我愿意为不同的平台使用不同的机制,只要它们都使用相同的范例。我也愿意尽可能深入地了解 C/C++/Obj-C 以实现特定于平台的绑定。

有什么建议吗?

谢谢。

0 投票
2 回答
438 浏览

java - 是否可以检测内核生成 epoll 的时刻与 Sun JVM 读取它的时刻之间的时间差?

即时间 A = 电压击中 NIC;时间 B = Java NIO 包中的选择器能够为 I/O 选择套接字通道。

0 投票
2 回答
17270 浏览

linux - Linux 中的匿名 inode 是什么?

我在谷歌上搜索了“匿名inode”,似乎它与epoll有关......但它实际上是什么?

0 投票
3 回答
13053 浏览

c - C:epoll和多线程

我需要创建专门的 HTTP 服务器,为此我计划使用 epoll sycall,但我想利用多个处理器/内核,我无法提出架构解决方案。ATM 我的想法是:创建多个线程,使用自己的 epoll 描述符,主线程接受连接并将它们分布在线程 epoll 之间。但是有没有更好的解决方案?我可以阅读哪些关于高负载架构的书籍/文章/指南?我只看过C10K文章,但大多数示例链接都已失效 :( 并且仍然没有关于此主题的深入书籍 :(。

谢谢你的回答。

UPD:请具体一点,我需要材料和示例(nginx 不是示例,因为它太复杂并且有多个抽象层来支持多个系统)。

0 投票
5 回答
6295 浏览

sockets - epoll_wait() 接收到两次关闭的套接字(read()/recv() 返回 0)

我们有一个使用 epoll 来监听和处理 http-connections 的应用程序。有时 epoll_wait() 在“行”中两次接收 fd 上的关闭事件。含义:epoll_wait() 返回连接 fd,其中 read()/recv() 返回 0。这是一个问题,因为我将 malloc:ed 指针保存在 epoll_event 结构 (struct epoll_event.data.ptr) 中,并且在 fd 时释放(socket) 第一次被检测为关闭。第二次崩溃了。

这个问题在实际使用中很少发生(除了一个站点,实际上每台服务器大约有 500-1000 个用户)。我可以使用每秒超过 1000 个同时连接的 http siege 来复制问题。在这种情况下,应用程序段错误(由于指针无效)非常随机,有时在几秒钟后,通常在数十分钟后。我已经能够以每秒更少的连接数来复制该问题,但为此我必须运行该应用程序很长时间,很多天,甚至几周。

所有新的 accept() 连接 fd:s 都设置为非阻塞,并以一次性、边缘触发和等待 read() 可用的方式添加到 epoll。那么为什么当服务器负载很高时,epoll 认为我的应用程序没有获得关闭事件并排队新的?

epoll_wait() 在它自己的线程中运行,并将 fd 事件排队等待其他地方处理。我注意到有多个关闭传入简单代码,检查是否有从 epoll 到同一个 fd 的连续两次事件。它确实发生了,并且两者都关闭的事件(recv(..,MSG_PEEK)告诉我这个:))。

epoll fd 被创建:

p>

epoll_wait() 运行如下:

p>

在 accept() 之后将 new fd 设置为非阻塞:

新的 fd 被添加到 epoll(客户端是 malloc:ed struct 指针):

并且在接收和处理来自 fd 的数据后,它会重新武装(当然是从 EPOLLONESHOT 开始)。起初我没有使用边缘触发和非阻塞 io,但我对其进行了测试并使用它们获得了不错的性能提升。这个问题在添加它们之前就存在了。顺便提一句。shutdown(fd, SHUT_RDWR) 在其他线程上用于触发适当的关闭事件,以便在服务器由于某些 http 错误等需要关闭 fd 时通过 epoll 接收(我实际上不知道这是否是正确的方法这样做,但效果很好)。

0 投票
1 回答
838 浏览

python - 在 OSX 上使用 python select kqueue 监控外部应用程序创建的文件

通常,将我 1 小时长的录音会话转码为 mp3 文件需要二十多分钟。

当 OSX 应用程序garageband 完成编写该 mp3 文件时,我想使用 python 脚本执行一系列 python 代码。

python中检测外部应用程序是否已完成将数据写入文件并关闭该文件的最佳方法是什么。我阅读了有关 kqueue 和 epoll 的信息,但是由于我没有 os 事件检测方面的背景并且找不到一个很好的示例,所以我在这里要求一个。

我现在使用的代码执行以下操作,我正在寻找更优雅的东西。

0 投票
1 回答
962 浏览

linux - `epoll_wait` 是否表示在添加 EPOLLIN 和 EPOLLOUT 时触发了哪个事件?

假设我在添加要监视的描述符时同时指定EPOLLIN和标志。从“epoll”联机帮助页中,不清楚作为数组的一部分返回的每个结构在其字段中究竟携带什么。报价:EPOLLOUTepoll_waitepoll_eventevents

events 成员将包含返回的事件位字段。

这是否意味着无法区分是否触发了表示“可以写”而不是“可以读”的事件?基本上有一个事件掩码,从逻辑上讲,我希望返回的数组能够准确地表示文件描述符上“发生”了哪些事件?

0 投票
2 回答
1750 浏览

c - epoll 文件描述符操作

我正试图在 Linux 中围绕 epoll 展开思考。
正常的操作似乎是:

我的问题是:鉴于epoll_fd似乎是一个常规文件描述符,除了三个 epoll 函数调用之外,我还可以使用它执行其他文件操作吗?

0 投票
1 回答
4168 浏览

linux - EBADF while recv 在 epoll_wait 之后

我有以下问题:我有一个接收连接的 epoll 代码:

当我收到输入连接时,我试图读取所有 buff 数据:

功能内accept_request。但有时我在调试输出中得到以下信息:

这意味着某人首先连接而不是断开连接,当他再次尝试连接时recv返回EBADF。我做错了什么?请帮我。

PSEPOLLRDHUP我只是关闭文件描述符。epollman 说没关系,因为它会自行从队列epoll中删除已关闭的 fd 。epoll_wait