A question concerning application architecture

Marc Lehmann schmorp at schmorp.de
Tue May 8 16:54:26 CEST 2012

On Tue, May 08, 2012 at 04:16:46PM +0200, Marek <marek at octogan.net> wrote:
> Now, I was thinking about running a ev_loop per thread and triggering
> threads from other threads via ev_async_send() call.

That's the standard idea, yes.

> I would like to ask you if such a architecture is acceptable, and

It is certainly acceptable.

> ev_async_send() will
> not decrease performance dramatically (as it will still be a kind of
> spinlock/busy waiting occurs) ?

I don't quite understand that question, but you can judge yourself: in
the current release of libev, if ev_run is blocking in a syscall, then
ev_async_send will write a byte into a pipe (or use eventfd) to wake it
up, once at most, per iteration. if the other thread is busy it merely
sets a global variable that is checked before ev_run blocks.

> Plus, I would like to run some modules periodically, hence running
> ev_timer or ev_periodic in a thread's loop.

Sounds fine to me.

                The choice of a       Deliantra, the free code+content MORPG
      -----==-     _GNU_              http://www.deliantra.net
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      schmorp at schmorp.de
      -=====/_/_//_/\_,_/ /_/\_\

More information about the libev mailing list