Я прочитал документ о функции epoll, запускаемой по краю, в Интернете следующим образом:
1. The file descriptor that represents the read side of a pipe (rfd) is registered on the epoll instance.
2. A pipe writer writes 2 kB of data on the write side of the pipe.
3. A call to epoll_wait(2) is done that will return rfd as a ready file descriptor.
4. The pipe reader reads 1 kB of data from rfd.
5. A call to epoll_wait(2) is done.
.......
.......
Предлагаемый способ использования epoll в качестве интерфейса, инициируемого фронтом (EPOLLET), заключается в следующем: i) Используйте неблокирующие файловые дескрипторы ii) Вызовите epoll_wait для события только после того, как read(2) или write(2) вернет EAGAIN.
Я понял 2, но я не мог понять, почему используются неблокирующие файловые дескрипторы.
Может ли кто-нибудь объяснить, почему используются неблокирующие файловые дескрипторы? Почему можно использовать блокирующие файловые дескрипторы в функции epoll, инициируемой уровнем?