right, libuv[1] is a good example of an IO completion API[2] that works
across both epoll/kqueue and IOCP.  There have been a couple offhand
discussions about libuv on httpd-dev, but no one is clamoring for adoption.

APR currently has no such abstraction.

pollcb was added to provide a polling API that was lock free, allowed
cross-thread addition and didn't keep extra data structures around for N
sockets under management.  (this contrasts to APR's pollset which has
locks, uses a couple RINGs of structures to keep track of things, etc)


[1] - https://github.com/libuv/libuv
[2] - http://nikhilm.github.io/uvbook/filesystem.html#buffers-and-streams


On Thu, Mar 12, 2015 at 3:40 PM, Ivan Zhakov <i...@visualsvn.com> wrote:

> On 9 March 2015 at 20:04, Jim Jagielski <j...@jagunet.com> wrote:
> > As far as I can tell, there are no real consumers of apr_pollcb_*()
> > other than Motorz (and Simple)... Not sure, but it looks like the
> > pollcb stuff may be lagging, since I'm getting some weird behavior
> > when using that impl. So I'll likely be moving Motorz off of
> > pollcb and use the "traditional" impl which has been proven in
> > Event.
> >
>
> I'd like to share some thoughts about pollcb as Windows developer.
> Most efficient way to handle a lot of connections on Windows is I/O
> completion ports  (IOCP). They are like epoll, but different. Here is
> good writeup about difference [1]. In short: IOCP provides
> notification when I/O completes, while epoll provides notifications
> when socket is ready to perform I/O operation. It would require
> additional buffer to implement pollcb using IOCP on Windows. Or
> APR/HTTPD should have different abstraction that is responsible for
> I/O and waiting for completion.
>
> [1]
> http://www.ulduzsoft.com/2014/01/practical-difference-between-epoll-and-windows-io-completion-ports-iocp/
>
> --
> Ivan Zhakov
>

Reply via email to