They should come in via signalfd unless they're the moral equivalent of a non-maskable interrupt.

And for people who want to use something other than Linux?

That is also good, but requires apps be rewritten to read from signalfd. With the separate thread approach you can get away without having to rewrite programs.