Hacker News new | ask | show | jobs
by luikore 4045 days ago
I think the authors want to avoid thundering herd. You can find this basic pattern in the book UNIX Network Programming.
2 comments

Correct.

The accepting socket is shared between multiple workers which each have its own fd for epoll or kqueue. Because of this a form of serialising the accepts between said workers is needed to avoid unnecessary wakeups.

Actually that is being changed:

http://lwn.net/Articles/633422/

See part about EPOLLEXCLUSIVE

That is great, thanks for sharing.
If you are the author, thanks for sharing the project. You did a great job and made the right choice of having per CPU worker processes each with their own epoll loop.
Hmm, thought that was fixed 10 years ago or so. I can't believe the standard accept() call will wake up all threads on a modern Linux kernel.

Maybe if it is using epoll/select/etc. it would exhibit the thundering herd issue.