while(true) { ev_run(loop, EVRUN_NOWAIT); } much faster than ev_run(loop);

Hayk Martirosyan hayk at stanford.edu
Wed Jan 21 03:04:11 CET 2015

The events are IO watchers that invoke callbacks. I'm using the hiredis
bindings for Redis (libev adapter here
<https://github.com/redis/hiredis/blob/master/adapters/libev.h>). My
hardware is an ultrabook, i5 processor with four cores. Kernel is
3.13.0-44-generic, Ubuntu 14.04 x86_64. By faster, I mean that when I send
out more events than the system can handle (redis commands), I get 5x more
commands per second with the while loop than with the internally looping
ev_run call. Can you briefly explain why this is the case? The looped
version also consumes 100% CPU since it is an infinite loop, which I want
to avoid by letting libev internally handle the looping. My invocation is
here <https://github.com/hmartiro/redox/blob/master/src/redox.cpp>, line
132, if it matters.

Thank you,

On Tue, Jan 20, 2015 at 12:26 AM, Marc Lehmann <schmorp at schmorp.de> wrote:

> On Mon, Jan 19, 2015 at 05:33:10PM -0800, Hayk Martirosyan <
> hayk at stanford.edu> wrote:
> > I'm using libev in a high-performance application, and I've noticed
> against
> > my expectation that looping ev_run with EVRUN_NOWAIT handles events 5x
> > faster than calling ev_run without the loop. Is this expected behavior?
> Depending on how you handle the events, your hardware and your kernel, and
> what you mean by "5x faster" this can well be the case, yes.
> --
>                 The choice of a       Deliantra, the free code+content
>       -----==-     _GNU_              http://www.deliantra.net
>       ----==-- _       generation
>       ---==---(_)__  __ ____  __      Marc Lehmann
>       --==---/ / _ \/ // /\ \/ /      schmorp at schmorp.de
>       -=====/_/_//_/\_,_/ /_/\_\
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.schmorp.de/pipermail/libev/attachments/20150120/28ad7113/attachment.html>

More information about the libev mailing list