Cross-platform event queues
When creating a cross-platform event queue, you have to deal with the fact that you have to create one unified API that’s the same whether it’s used on Windows (IOCP), macOS (kqueue), or Linux (epoll). The most obvious difference is that IOCP is completion-based while kqueue and epoll are readiness-based.
This fundamental difference means that you have to make a choice:
- You can create an abstraction that treats kqueue and epoll as completion-based queues, or
- You can create an abstraction that treats IOCP as a readiness-based queue
From my personal experience, it’s a lot easier to create an abstraction that mimics a completion-based queue and handle the fact that kqueue and epoll are readiness-based behind the scenes than the other way around. The use of wepoll, as I alluded to earlier, is one way of creating a readiness-based queue on Windows. It will simplify creating such an API greatly, but we’ll leave...