IO::Async::Loop::Epoll - use IO::Async with epoll on Linux
IO::Async
epoll
use IO::Async::Loop::Epoll; use IO::Async::Stream; use IO::Async::Signal; my $loop = IO::Async::Loop::Epoll->new(); $loop->add( IO::Async::Stream->new( read_handle => \*STDIN, on_read => sub { my ( $self, $buffref ) = @_; while( $$buffref =~ s/^(.*)\r?\n// ) { print "You said: $1\n"; } }, ) ); $loop->add( IO::Async::Signal->new( name => 'INT', on_receipt => sub { print "SIGINT, will now quit\n"; $loop->loop_stop; }, ) ); $loop->loop_forever();
This subclass of IO::Async::Loop uses IO::Epoll to perform read-ready and write-ready tests so that the O(1) high-performance multiplexing of Linux's epoll_pwait(2) syscall can be used.
IO::Async::Loop
IO::Epoll
epoll_pwait(2)
The epoll Linux subsystem uses a registration system similar to the higher level IO::Poll object wrapper, meaning that better performance can be achieved in programs using a large number of filehandles. Each epoll_pwait(2) syscall only has an overhead proportional to the number of ready filehandles, rather than the total number being watched. For more detail, see the epoll(7) manpage.
IO::Poll
epoll(7)
This class uses the epoll_pwait(2) system call, which atomically switches the process's signal mask, performs a wait exactly as epoll_wait(2) would, then switches it back. This allows a process to block the signals it cares about, but switch in an empty signal mask during the poll, allowing it to handle file IO and signals concurrently.
epoll_wait(2)
This function returns a new instance of a IO::Async::Loop::Epoll object.
IO::Async::Loop::Epoll
As this is a subclass of IO::Async::Loop, all of its methods are inherited. Expect where noted below, all of the class's methods behave identically to IO::Async::Loop.
This method calls the poll() method on the stored IO::Epoll object, passing in the value of $timeout, and processes the results of that call. It returns the total number of IO::Async::Notifier callbacks invoked, or undef if the underlying epoll_pwait() method returned an error. If the epoll_pwait() was interrupted by a signal, then 0 is returned instead.
poll()
$timeout
IO::Async::Notifier
undef
epoll_pwait()
IO::Epoll - Scalable IO Multiplexing for Linux 2.5.44 and higher
IO::Async::Loop::Poll - use IO::Async with poll(2)
Paul Evans <leonerd@leonerd.org.uk>
To install IO::Async::Loop::Epoll, copy and paste the appropriate command in to your terminal.
cpanm
cpanm IO::Async::Loop::Epoll
CPAN shell
perl -MCPAN -e shell install IO::Async::Loop::Epoll
For more information on module installation, please visit the detailed CPAN module installation guide.