The linked article basically goes through a bunch of scenarios examining clumsy ways to chase a slightly-obscure requirement ("wake up exactly one thread per event using a single descriptor") just to land in the very last paragraph on the clearly correct solution ("just use ONESHOT, that's what it's for!").
I mean, there's literally a feature right there in the man page[1] that does exactly what the author wants. They just didn't want to learn about it and view their ignorance as a bug in the software.
Meh. This gets tiresome. As the article linked yesterday points out, epoll() is the "API that powers the internet", and has effectively solved the C10k problem for everyone that has it.
But yeah, you need to read the man page.
[1] No, seriously, it's right there in the man page, discussing exactly this scenario and how to avoid it.
The point is, do all of the other configurations for epoll have legitimate usecases justifying the complexity and need for those parameters? The kqueue design scales from single-threaded to multithreaded scenarios without issue and without all of these pitfalls, so why not just adopt that design? Why does the specific issue need to be a solution described in the man page at all?
> As the article linked yesterday points out, epoll() is the "API that powers the internet", and has effectively solved the C10k problem for everyone that has it.
Being able to solve a problem and doing it well are not the same. The latter arguably deserves criticism.
Ahem. The headline under discussion is "fundamentally broken", which given the context you've granted, sounds closer to a lie than the truth to me.
Meh. OS advocates will always have their aesthetic wars, they have for decades and it's not going to stop. I'm just trying to draw a line at what constitutes appropriate criticism, and this went way over the line.
If an abstraction requires a series of special incantations to use correctly, and the other modes of use don't have legitimate use cases of their own, "fundamentally broken" sounds like a fair conclusion.
These are the words people use to describe something they don't like but which they don't understand. Really, just read the man page. It's a low level OS facility; these aren't simple APIs (neither is kqueue, FWIW). If you can figure out file descriptor passing or socket options, you can figure out epoll. If you really can't figure out epoll, you probably want to be working at a different layer of the abstraction stack.
Then with all respect, I think your strategy for debate is fundamentally broken, not unlike your understanding of the epoll facility or ability to read its man page, so I take my leave.
I find that pretty rich considering you provided literally no evidence of your claims, where I provided at least one detailed analysis of both epoll and kqueue in addition to the article for this thread, and yet you somehow feel entitled to make personal attacks on my technical abilities. But sure, you do you. Best of luck with that.
Yes.
This blog entry explains it much better then I could: https://wingolog.org/archives/2018/05/21/correct-or-inotify-...
inotify (and now, fanotify) are specifically designed to watch for filesystem events, whereas kqueue is a generic event system used for many things. In many ways that's better, but it this lack of specialisation also comes with some drawbacks.
I think of stakeholder meetings and fighting business requirements?
I had an inotify project in process for creating a better developer experience. Seeing this hit Hacker News tells me it's a fucking political landmine.
Sigh.
Don't worry, I'll have the strength to argue the proper technical solution that still satisfies business needs. That's the important thing!
Anyway I used inotify multiple times in various programming languages and it was always fine, I'm a bit surprised that it's considered "broken" in any way.
I mean, is it broken regarding to correctness or just performance?
But, you've inspired me to do a deeper historical and technical deep dive of the filesystem event space. Thank you.
Have a great weekend!
They understand who I am.
Have a good week!
Does fanotify fix those issues?
Similar "minor implementation issues" occur when considering how to fix all of the other "bugs."
It's fine if you don't like the design trade-offs of a particular solution. But pretending that they aren't trade-offs, or they aren't valid choices, is just going to leave people shaking their heads at you.
Edit: and by "you" i mean the authors of these articles. Although I think Marek is a very talented guy and probably just a bit hyperbolic with his titles.