On Tue, Apr 01, 2014 at 02:10:24PM +0200, Yoran Heling <i...@yorhel.nl> wrote:
> On 2014-04-01, Konstantin Olkhovskiy wrote:
> > 2014-04-01 15:51 GMT+04:00 utku genç <utkug...@gmail.com>:
> > > libuv has a convenience function for using possible blocking library
> > > operations with event-loop paradigm*. What, do you think, is the best way
> > > to implement such functionality for libev?
> > >
> > 
> > Probably best way is to use libeio [1]. Complete example of libev
> > integration is available in the documentation [2].
> 
> Note that libeio isn't suitable as a general purpose thread pool because
> it configures a rather small stack for the worker threads.

Correct, although one can configure the stack size using the EIO_STACKSIZE
symbol, even then libeio isn't a generic threadpool, as mixing cpu or
event-intensive jobs with I/O-intensive jobs in the same threadpool is
bad.

(libeio does come with it's own threadpool called etp, but that isn't yet
separated from libeio).

> I wrote a generic thread pool for libev some time ago and dubbed it
> evtp[1].

Extra points for supporting EV_MULTIPLICITY :)

A problem is there though: your threadpool has the classical problem of
inheriting the signal mask, and thus wreaks havoc with signal handling (by
introducing race conditions with event libs such as libev and by making it
impossible to block signals).

Consider adding something like this around your pthread_create call:

  sigfillset (&fullsigset);
  pthread_sigmask (SIG_SETMASK, &fullsigset, &oldsigset);

  int r = pthread_create(&thread, &attr, evtp_thread, tp);

  pthread_sigmask (SIG_SETMASK, &oldsigset, 0);

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

_______________________________________________
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to