ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.447 by root, Sat Jun 22 16:25:53 2019 UTC vs.
Revision 1.448 by root, Sun Jun 23 02:02:24 2019 UTC

574This backend maps C<EV_READ> and C<EV_WRITE> in the same way as 574This backend maps C<EV_READ> and C<EV_WRITE> in the same way as
575C<EVBACKEND_POLL>. 575C<EVBACKEND_POLL>.
576 576
577=item C<EVBACKEND_LINUXAIO> (value 64, Linux) 577=item C<EVBACKEND_LINUXAIO> (value 64, Linux)
578 578
579Use the linux-specific linux aio (I<not> C<< aio(7) >>) event interface 579Use the linux-specific linux aio (I<not> C<< aio(7) >> but C<<
580available in post-4.18 kernels. 580io_submit(2) >>) event interface available in post-4.18 kernels.
581 581
582If this backend works for you (as of this writing, it was very 582If this backend works for you (as of this writing, it was very
583experimental and only supports a subset of file types), it is the best 583experimental), it is the best event interface available on linux and might
584event interface available on linux and might be well worth it enabling it 584be well worth enabling it - if it isn't available in your kernel this will
585- if it isn't available in your kernel this will be detected and another 585be detected and this backend will be skipped.
586backend will be chosen.
587 586
588This backend can batch oneshot requests and uses a user-space ring buffer 587This backend can batch oneshot requests and supports a user-space ring
589to receive events. It also doesn't suffer from most of the design problems 588buffer to receive events. It also doesn't suffer from most of the design
590of epoll (such as not being able to remove event sources from the epoll 589problems of epoll (such as not being able to remove event sources from
591set), and generally sounds too good to be true. Because, this being the 590the epoll set), and generally sounds too good to be true. Because, this
592linux kernel, of course it suffers from a whole new set of limitations. 591being the linux kernel, of course it suffers from a whole new set of
592limitations.
593 593
594For one, it is not easily embeddable (but probably could be done using 594For one, it is not easily embeddable (but probably could be done using
595an event fd at some extra overhead). It also is subject to various 595an event fd at some extra overhead). It also is subject to a system wide
596arbitrary limits that can be configured in F</proc/sys/fs/aio-max-nr> 596limit that can be configured in F</proc/sys/fs/aio-max-nr> - each loop
597and F</proc/sys/fs/aio-nr>), which could lead to it being skipped during 597currently requires C<61> of this number. If no aio requests are left, this
598initialisation. 598backend will be skipped during initialisation.
599 599
600Most problematic in practise, however, is that, like kqueue, it requires 600Most problematic in practise, however, is that not all file descriptors
601special support from drivers, and, not surprisingly, not all drivers
602implement it. For example, in linux 4.19, tcp sockets, pipes, event fds, 601work with it. For example, in linux 5.1, tcp sockets, pipes, event fds,
603files, F</dev/null> and a few others are supported, but ttys are not, so 602files, F</dev/null> and a few others are supported, but ttys do not work
604this is not (yet?) a generic event polling interface but is probably still 603(probably because of a bug), so this is not (yet?) a generic event polling
605be very useful in a web server or similar program. 604interface.
605
606To work around this latter problem, the current version of libev uses
607epoll as a fallback for file deescriptor types that do not work. Epoll
608is used in, kind of, slow mode that hopefully avoids most of its design
609problems.
606 610
607This backend maps C<EV_READ> and C<EV_WRITE> in the same way as 611This backend maps C<EV_READ> and C<EV_WRITE> in the same way as
608C<EVBACKEND_POLL>. 612C<EVBACKEND_POLL>.
609 613
610=item C<EVBACKEND_KQUEUE> (value 8, most BSD clones) 614=item C<EVBACKEND_KQUEUE> (value 8, most BSD clones)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines