about summary refs log tree commit homepage
path: root/lib/PublicInbox/Epoll.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-10-31 20:42:52 +0000
committerEric Wong <e@80x24.org>2023-11-01 07:08:09 +0000
commitfdf90c0ffbf608ed08665eaffa5c750fa5a5bfee (patch)
treef9365a4472ef6e5dda901c68cc7c36b7da8c9fff /lib/PublicInbox/Epoll.pm
parent4d2f3651bde2f2c61b78973df56b6e6ee37a6dce (diff)
downloadpublic-inbox-fdf90c0ffbf608ed08665eaffa5c750fa5a5bfee.tar.gz
The epoll implementation is the only one which respects the
limit (kevent would, but IO::KQueue does not).  In any case,
I'm not a fan of the maxevents=1000 historical default since
it leads to fairness problems with shared non-blocking listeners
across multiple daemon workers.
Diffstat (limited to 'lib/PublicInbox/Epoll.pm')
-rw-r--r--lib/PublicInbox/Epoll.pm5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/PublicInbox/Epoll.pm b/lib/PublicInbox/Epoll.pm
index d55c8535..7e0aa6e7 100644
--- a/lib/PublicInbox/Epoll.pm
+++ b/lib/PublicInbox/Epoll.pm
@@ -18,6 +18,9 @@ sub new {
 sub ep_add { epoll_ctl(fileno(${$_[0]}), EPOLL_CTL_ADD, fileno($_[1]), $_[2]) }
 sub ep_mod { epoll_ctl(fileno(${$_[0]}), EPOLL_CTL_MOD, fileno($_[1]), $_[2]) }
 sub ep_del { epoll_ctl(fileno(${$_[0]}), EPOLL_CTL_DEL, fileno($_[1]), 0) }
-sub ep_wait { epoll_wait(fileno(${$_[0]}), @_[1, 2, 3]) }
+
+# n.b. maxevents=1000 is the historical default.  maxevents=1 (yes, one)
+# is more fair under load with multiple worker processes sharing one listener
+sub ep_wait { epoll_wait(fileno(${$_[0]}), 1000, @_[1, 2]) }
 
 1;