httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Querna <c...@force-elite.com>
Subject Re: event_mpm and poll()
Date Thu, 02 Mar 2006 07:07:05 GMT
Saju Pillai wrote:
> 
> 
> On 02/03/06, *Greg Ames* <gregames@apache.org 
> <mailto:gregames@apache.org>> wrote:
> 
>     Paul Querna wrote:
> 
>      >>  The event mpm expects the apr_pollset backends to be based on
>     epoll()
>      >> / kqueue() or Solaris 10 event ports. What are the reasons
>     because of
>      >> which poll() is not considered to be suitable for the event mpm ?
>      >>
>      >> Is this because of the large number of fd's to be polled and linear
>      >> scalability that epoll() / kqueue() provides but poll() doesn't ? Is
>      >> there any reason why a poll() based implemenation of event_mpm
>     cannot
>      >> be done if some performance degradation is ok ?
>      >
>      >
>      > Performance is actually not the core reason.
>      >
>      > The core reason is the thread-safety of the pollset.
>      >
>      > Poll() does not allow a 'main thread' that is polling to get new
>     sockets
>      > added to it, without first waking it up.
>      >
>      > KQueue/EPoll both allow a second thread to insert pollfds into the
>      > pollset, while a main thread is still polling.  This significantly
>      > reduces the complexity, and allows for better performance,
>     because we
>      > don't require a Context-Switch to add a client to the main pollset.
> 
>     Bill Stoddard and I originally used poll().  but there was a problem
>     getting the event
>     thread to notice a new descriptor and add it to the pollset in a
>     timely manner.  I added
>     some Rube Goldberg stuff to solve that, involving a pipe and extra
>     context switching as
>     Paul mentioned.  that was good enough for a proof of concept and
>     shaking out other issues.
> 
> 
> Cool.
> 
> Where can I see this code ? I looked through trunk & 2.2.x branches from 
> the web but the oldest event.c uses epoll()/kqueue().
> 
> I was looking to see if I could hack up a async worker like mpm using 
> poll() on 2.0. A look at your code will help a lot :)

I don't want to be too discouraging, but why only using poll(), and why 
only with 2.0?

They both seem like steps backwards :)

-Paul



Mime
View raw message