select / poll also relies on kernel notification for off-the-shelf file descriptors. But the drawback of select / poll is that they are blocked as soon as they are called, because the Systemcall-Handler runs in a kernel-space.
Real asynchronous I / O is via LibAIO (on Linux) and IOCP on Windows. As far as I know, they do not block the calling process / thread in user space, and they allow real overlapping I / O.
This means that asynchronous non-blocking I / O (LibAIO and IOCP) is faster because it does not block the calling thread and they allow real overlapping I / O. Selection / polling is also asynchronous, but they are asynchronous locking. Both btw select and poll suffer from other specific problems, so they cannot scale so well.
I hope I can help. (I'm new too :))
source share