Por que o epoll é mais rápido que o select?

Eu tenho visto muitas comparações que dizem que select tem que percorrer a lista fd, e isso é lento. Mas por que o epoll não tem que fazer isso?