问题标签 [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 回答
345 浏览

perl - Perl 中的 Solaris /dev/poll 支持

有没有人通过模块或直接在他们的应用程序中使用 Perl 的 /dev/poll(Linux epoll 方法的 Solaris 等价物)的经验?

我可以通过谷歌找到关于这个主题的内容不多。

0 投票
2 回答
2295 浏览

python - Are there any major performance differences between epoll and kqueue?

My development machine is a MacBook (which of course has kqueue). However, in production we're running Linux (which of course uses epoll). Obviously, to know the performance characteristics of my code I need to run it using epoll. That said, is performance that I see under kqueue a decent approximation of what I'll see with epoll? Or are there any situations where performance may be significantly different? For the most part, it seems that kqueue and epoll are pretty much similar in terms of performance, but I haven't really done very thorough testing.

If it makes a difference, I'm using tornado in Python.

0 投票
1 回答
5256 浏览

c - 通过轮询非阻塞套接字正确处理 EWOULDBLOCK

一段时间以来,我一直在研究轮询 TCP 守护进程。最近,我读到非阻塞套接字有时会在 send() 或 recv() 期间抛出 EWOULDBLOCK 错误。我的理解是,如果 recv() 抛出 EWOULDBLOCK,这(通常)意味着没有任何东西可以接收。但我不清楚的是在什么情况下 send() 会抛出 EWOULDBLOCK,以及处理此类事件的正确程序是什么?

如果 send() 抛出 EWOULDBLOCK,守护进程是否应该简单地从该事件继续移动到下一个事件?使用像 epoll 这样的轮询接口,当描述符准备好写入时会触发一个新事件吗?

0 投票
2 回答
780 浏览

linux - 有什么方法可以用 kqueue/kevent 模拟 epoll_wait 吗?

我有一堆文件描述符的列表,我已经为其创建了 kevents,我试图弄清楚是否有任何方法可以获得准备好进行读取或写入访问的文件描述符的数量。

有什么方法可以获取“就绪”文件描述符列表,就像 epoll_wait 提供的那样?

0 投票
2 回答
11545 浏览

c - 带epoll的多线程UDP服务器?

我想在 C/Linux 中开发一个多线程 UDP 服务器。该服务在单个端口 x 上运行,因此只能将单个 UDP 套接字绑定到它。为了在高负载下工作,我有 n 个线程(静态定义),比如每个 CPU 1 个线程。可以使用 epoll_wait 将工作交付给线程,因此可以使用 'EPOLLET | 按需唤醒线程。埃波罗内肖特”。我附上了一个代码示例:

这是用 epoll 处理这种情况的正确方法吗?函数 _handle_request_ 是否应该尽快返回,因为此时套接字的事件队列被阻塞了?

感谢您的回复!

0 投票
1 回答
1305 浏览

linux - 如何使用 epoll_select 和 EPOLLET 读取多个文件描述符?

人epoll:

想象一下我们有两个 fd:第一个是被动的,数据仅有时可用,第二个是主动的,数据有时不可用。

epoll_wait 返回我们可以读取两者。我们在循环中读取{第一个,而不是第二个}(没有调用 epoll_wait 因为它可能会在数据仍然可用时突然阻塞)。

现在第一个文件描述符在读取时返回 EAGAIN。

该怎么办?

  1. 如果我们继续在循环中读取第二个 fd(不调用 epoll_wait),我们可能会错过第一个 fd 上的数据可用。它只会在没有 EAGAIN 的情况下阅读和阅读。
  2. 如果我们在每次从第二个 fd 读取之前“咨询” epoll_wait,则 epoll_wait 可能会因为前一次调用没有任何更改而突然阻塞(数据在第一个 FD 上仍然不可用,但在第二个 FD 上仍然可用)。

如何继续处理第二个 FD,但又不会忘记第一个 FD?

更新:又发现了一件事:man epoll_wait:

有了这个,即使没有事件,我也可以枚举 FD 的事件。

0 投票
3 回答
54789 浏览

linux - select vs poll vs epoll

I am designing a new server which needs to support thousands of UDP connections (somewhere around 100,000 sessions). Any input or suggestions on which one to use?

0 投票
1 回答
16991 浏览

asynchronous - epoll、poll、threadpool有什么区别?

有人可以解释epoll,poll和线程池之间的区别吗?

  • 有什么优点/缺点?
  • 对框架有什么建议吗?
  • 对简单/基本教程有什么建议吗?
  • 似乎epoll并且poll是特定于 Linux 的...... Windows 是否有等效的替代方案?
0 投票
2 回答
1847 浏览

linux - 关于epoll和splice的问题

我的应用程序将通过网络发送大量数据,所以我决定(因为我使用的是 Linux)使用 epoll 和 splice。这是我的看法(伪代码):

我假设我的应用程序将打开多达 2000 个 TCP 套接字。我想问你两件事:

  1. 会有相当多的epoll_ctl调用,当我有这么多套接字时会不会很慢?
  2. 文件描述符必须首先变得可读,并且在套接字变为可写之前会有一些时间间隔。我可以确定,在套接字变为可写文件描述符的那一刻仍然是可读的(以避免阻塞调用)?
0 投票
2 回答
578 浏览

haskell - 基于 kqueue 的 Haskell 并发

我编写了并发应用程序并发现了错误:

buildFdSets:文件描述符超出范围

我发现这是操作系统对一个进程中文件描述符数量的限制,在我的FreeBSD中是1024. 是的极限select()。我还了解到还有另一种方法:kqueue().

我的问题是:

  • 如何赢得文件描述符的限制?
  • 如何在haskell程序中使用kqueue()而不是使用?select()