how to use AnyEvent::Handle on the child of AnyEvent::Run (aka portable_socketpair)?
Marc Lehmann
schmorp at schmorp.de
Thu Nov 21 15:36:15 CET 2013
On Thu, Nov 21, 2013 at 09:16:18AM -0500, Fulko Hew <fulko.hew at gmail.com> wrote:
> Sorry again, but I get confused with which is frontend versus backend.
> (_I_ think front end is the parent and backend is the child/children
> where
>
> RPC execution takes place.)
I think the same, that's how it is, even :)
> I was hoping that a block in the backend wouldn't block 'other' backends.
I would hope so, too - I wouldn't even know how one child would be able to
block another child process or the parent.
> > Why do you (wrongly) think that blocking breaks anything? What do you
> > think breaks when you block?
>
> I was expecting, that since the RPC is being executed in a 'forked'
> environment, that a block in the RPC would not block the parent
> from issuing another RPC (to effectively another, separate? forked
> environment).
I expect that, too, and that's also what happens in your example code on
my system.
> [I attached my test code. If you enable Coro sleep, it works, but
> if you enable the blocking sleep, each RPC invocation blocks everything.]
I tried your program, but in both cases "calling completed" is printed before
the results come in, so the main program isn't blocked.
If you mean the child gets blocked, well, that's what your code does, and
that is what you claimed you wanted to have, so I don't think that's what
you mean.
> ... I also tried creating two AnyEvent::Fork->new()
> that I hoped would duplicate the child in which to execute
> the RPC (similar to your Coro::async_pool), but that created
> even more errors.
You haven't mentioned any errors yet. What do you mean with "more errors"?
With Coro's sleep, I get:
Thu Nov 21 15:29:33 2013 calling add
Thu Nov 21 15:29:33 2013 calling mul
Thu Nov 21 15:29:33 2013 calling completed
Thu Nov 21 15:29:33 2013 add called
Thu Nov 21 15:29:33 2013 mul called
Thu Nov 21 15:29:34 2013 mul returning after 1 second sleep
mul 1,3 3
Thu Nov 21 15:29:34 2013 mul done
Thu Nov 21 15:29:36 2013 add returning after 3 second sleep
add 1,3 4
Thu Nov 21 15:29:36 2013 add done
with perl sleep, I get:
Thu Nov 21 15:29:54 2013 calling add
Thu Nov 21 15:29:54 2013 calling mul
Thu Nov 21 15:29:54 2013 calling completed
Thu Nov 21 15:29:54 2013 add called
Thu Nov 21 15:29:57 2013 add returning after 3 second sleep
Thu Nov 21 15:29:57 2013 mul called
Thu Nov 21 15:29:58 2013 mul returning after 1 second sleep
add 1,3 4
Thu Nov 21 15:29:58 2013 add done
mul 1,3 3
Thu Nov 21 15:29:58 2013 mul done
In both cases the parent wasn't blocked in any way. What output do you
get?
--
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 anyevent
mailing list