… | |
… | |
945 | precedence over speed. Nevertheless, its performance is surprising, as the |
945 | precedence over speed. Nevertheless, its performance is surprising, as the |
946 | file descriptor is dup()ed for each watcher. This shows that the dup() |
946 | file descriptor is dup()ed for each watcher. This shows that the dup() |
947 | employed by some adaptors is not a big performance issue (it does incur a |
947 | employed by some adaptors is not a big performance issue (it does incur a |
948 | hidden memory cost inside the kernel, though). |
948 | hidden memory cost inside the kernel, though). |
949 | |
949 | |
950 | C<POE>, regardless of backend (wether using its pure perl select-based |
950 | C<POE>, regardless of underlying event loop (wether using its pure perl |
951 | backend or the Event backend) shows abysmal performance and memory |
951 | select-based backend or the Event module) shows abysmal performance and |
952 | usage: Watchers use almost 30 times as much memory as EV watchers, and 10 |
952 | memory usage: Watchers use almost 30 times as much memory as EV watchers, |
953 | times as much memory as both Event or EV via AnyEvent. Watcher invocation |
953 | and 10 times as much memory as both Event or EV via AnyEvent. Watcher |
954 | is almost 700 times slower as with AnyEvent's pure perl implementation. |
954 | invocation is almost 700 times slower than with AnyEvent's pure perl |
|
|
955 | implementation. The design of the POE adaptor class in AnyEvent can not |
|
|
956 | really account for this, as session creation overhead is small compared |
|
|
957 | to execution of the state machine, which is coded pretty optimally within |
|
|
958 | L<AnyEvent::Impl::POE>. POE simply seems to be abysmally slow. |
955 | |
959 | |
|
|
960 | =head2 Summary |
|
|
961 | |
956 | Summary: using EV through AnyEvent is faster than any other event |
962 | Using EV through AnyEvent is faster than any other event loop, but most |
957 | loop. The overhead AnyEvent adds can be very small, and you should avoid |
963 | event loops have acceptable performance with or without AnyEvent. |
958 | POE like the plague if you want performance or reasonable memory usage. |
964 | |
|
|
965 | The overhead AnyEvent adds is usually much smaller than the overhead of |
|
|
966 | the actual event loop, only with extremely fast event loops such as the EV |
|
|
967 | adds Anyevent significant overhead. |
|
|
968 | |
|
|
969 | And you should simply avoid POE like the plague if you want performance or |
|
|
970 | reasonable memory usage. |
959 | |
971 | |
960 | |
972 | |
961 | =head1 FORK |
973 | =head1 FORK |
962 | |
974 | |
963 | Most event libraries are not fork-safe. The ones who are usually are |
975 | Most event libraries are not fork-safe. The ones who are usually are |