In his blog post on thread use in C# async/await (http://blog.stephencleary.com/2013/11/there-is-no-thread.html) Stephen Cleary details how there's no thread being used to process a truly async operation, like file I/O, web request etc. (other than time borrowed from existing threads such as I/O threads)
From that post it seems that the BCL will use either Overlapped I/O or I/O Completion Ports to pass the operation to the OS when the OS is Windows.
My question is does the same 'threadless' and non-blocking model of async operations apply on implementations of C# for other OSs, chiefly Mono for Linux?
If so what's the channel the BCL uses to communicate with the OS, since it would seem IOCP (and overlapped I/O) are specific to the Win32 API?
Additionally, presumably, once it reaches the driver the operation is async irrespective of OS?