Re: FW: Re: [seda] Re: SEDA

Richard Emberson <[email protected]> Wed, 14 Jan 2004 07:46:56 -0800
Newsgroups gmane.comp.java.seda.user
Message-ID <[email protected]>
Word of warning concerning the 'Avalonized version of Seda':
I looked into it ... 1) it had numerous bugs, like no one
actually used it!; 2) it did polling (IMHO an application that
polls gets a D); and 3) I ended up re-writing all of it.
So, its basically an interesting idea but its only the beginning.

RME


Tim Walker wrote:
> Hi, 
> 
> Just wanted to pass along a thread involving the use of SEDA in the Apache Directory project. 
> 
> Hope this finds you all well. 
> 
> Best regards, 
> 
> --
> Tim 
> 
> 
> -----Original Message-----
> From: Richard Wallace [mailto:[email protected]] 
> Sent: Tuesday, January 13, 2004 5:36 PM
> To: [email protected]
> Subject: RE: Re: [seda] Re: SEDA
> 
> Quoting Alex Karasulu <[email protected]>:
> 
> 
>>Hello again,
>>
>>
>>>From: [email protected]
>>>Quoting Tim Walker <[email protected]>:
>>>
>>>
>>>>This is very interesting. Is the 'Avalonized version of Seda' a rewrite?
>>
>>Any
>>
>>>>thoughts on the motivation for
>>>>the rewrite in Eve?
>>
>>Tim I have looked at the event stuff in Excalibur in the past and
>>should probably revisit it before responding but well I'm runing on
>>low fuel now adays so I'll just state that it was more complex for
>>my needs.  Also I think it was geared to use sandstorm I think.
>>
> 
> 
> I doesn't use anything from sandstorm.  It just takes inspiration from it.  I
> looked at it a while ago too and just revisited it today.  Before it didn't
> really seem complete, but it does now.  And it seems simpler to me than the
> Sandstorm implementation (though I don't think my understanding is complete
> yet).
> 
> 
>>My view of SEDA may be a bit oversimplified.  I view a stage as
>>a event source or sink.  Events are enqueued onto the event queues
>>of stages.  Enqueue predicates associated with the stage are used
>>to determine if the enqueue operation should occur or not.  Stages
>>have a thread pool.  A stage handler dequeues events delegating
>>processing to a worker thread.  The worker thread processes the
>>event possibly generating other events which are handled by other
>>stages.
>>
> 
> 
> That's is my understanding.
> 
> 
>>Now these APIs I looked at had all the fancy stuff like setting
>>up the source to sink mapping and some other features of a SEDA.
>>I did not want to get carried away with this in Eve and just
>>implemented simple stages without the bells and whistles.  The
>>goal was to simply have staged processing.  The SEDA stuff I have
>>encountered in the past left me with the feeling that connection
>>handling with non-blocking IO was too integrated with the simple
>>structures needed to implement SEDA.  I wanted to decouple the
>>connection handling from the fact that the architecture is based
>>on staged processing of requests.  Really the way you handle
>>connection establishment, reads, writes and droping connections
>>will be application and implementation specific so why mix the
>>two together.  Also don't presume you have to be non-blocking
>>to implement SEDA.  With continuations you can use blocking sockets
>>to multiplex IO handling.  So the less presumptions we make the
>>more useful the API.  Also Eve is complex enough so what
>>ever simplifications I can make wrt the implementation without
>>loosing the benefits the more maintainable the code will be.
>>
> 
> 
> In the Excalibur event package there is no use of NIO or anyother kind of IO. 
> It has ThreadManager's which handle processing of events.  It has the
> CommandManager which, in my understanding, represents a stage.  Then there are
> a couple of queues (DefaultQueue grows, FixedSizeQueue doesn't).  There are a
> couple kinds of Sinks (which is where my understanding is a bit short).  And
> there are some EnqueuePredicates.  My biggest question in the existing event
> package is how an event (called a Command in Excalibur events) moves from one
> stage to the next.  I don't see any mappings between source and sink, though I
> may be missing something.  From my understanding right now it seems the
> EventHandler would decide what the next CommandManager (Stage) to which the
> command (event) should be sent.
> 
> 
>>Take for example the code associated with dynamic source->sink
>>mappings.  These are all nice features to have when you want to
>>dynamically inject a new instrumentation stage between two stages
>>to measure the throughput or whatever.  Why bother with it if the
>>relationships between your stages are to be static.  Also if
>>one wanted to add an extra stage simply changing your container
>>configuration would allow you to do so with relative ease and
>>if designed properly it may be a configuration change not a code
>>change.  Lot's of IoC containers like Merlin will allow you to
>>do this with a restart.  Merlin may even get to the point soon
>>where it can do it dynamically further lessening the need to have
>>source->sink dynamic mappings.
>>
>>BTW Berin Loritsch from Avalon probably can explain the Excalibur
>>stuff better so I have CC'd him in case he wants to plug in.  Note
>>also that Excalibur may serve your needs - it's good stuff but I
>>was looking for only half of it.
>>
> 
> 
> I would love to get Berin's input on this since this was his baby.
> 
> 
>>>The events package isn't so much a rewrite as it is a different approach
>>
>>using
>>
>>>the same ideas.  I'm no expert on the events package in excalibur but from
>>
>>what
>>
>>>I understand it is meant as a more general solution following the Avalon
>>
>>design
>>
>>>philosophy (i.e. IoC, etc.).
>>>
>>
>>Mr. Wallace (Don't have your first name),
>>
>>Absolutely I agree, you're dead on target.  I think the Avalon stuff
>>started off as Silk if I remember correctly.  But it moved into Excalibur
>>and became the event project under the Excalibur umbrella.
>>
> 
> 
> Yup, that sounds right to me.
> 
> 
>>If I had my way I would implement SEDA classes as POJOs within an
>>API and borrow from whatever I can in commons.  James Strachan has
>>a nice little thread pool so I'd use that.  There are queues in the
>>collections packages and you can decorate them with the ability to
>>consult enqueue predicates but I think someone must have already beat
>>us to it.  I would then use these vanilla classes with the various
>>IoC containers frameworks to create container specific wrappers
>>around the Stage POJO implementation.  This way you can remain container
>>independent and reuse as much tested tried and true commons code as
>>possible.
>>
>>Hope that clarifies my approach and whether or not that approach is
>>worth a simple commons based subproject.  What do you guys think?
>>
> 
> 
> I have mixed feelings about commons.  Most of them have already been mentioned
> before and I don't want to start a war here over it so I'll just say that I
> think the stuff in Excalibur events is, at the very least, a good starting
> point for any type of SEDA development.  If you find it's not adequate maybe
> changes should be made within the event package.  This is especially true if
> you are already planning on using the Avalon framework and the Merlin
> container.
> 
> Rich
> 
> 
>>Alex
>>
>>
>>
> 
> 
> 
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by: Perforce Software.
> Perforce is the Fast Software Configuration Management System offering
> advanced branching capabilities and atomic changes on 50+ platforms.
> Free Eval! http://www.perforce.com/perforce/loadprog.html
> _______________________________________________
> SEDA-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/seda-users
> 




-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html