There's some great information about IOCP vs. the various methods used on Linux (sans io_uring).
PyParallel: How we removed the GIL and exploited all cores -
https://news.ycombinator.com/item?id=7861942
The speaker's HN profile for additional commentary on this topic -