Hacker News new | past | comments | ask | show | jobs | submit login

The site and documentations looks well done, great job!

Architecture looks pretty interesting too. Wonder why was there a need for an accept lock? Ordinary accept() socket call already allows for simultaneous threads/process wait on a single socket.




I think the authors want to avoid thundering herd. You can find this basic pattern in the book UNIX Network Programming.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: