Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[REBOL] Re: Multithreading with Rebol

From: greggirwin:mindspring at: 17-Oct-2003 11:24

Hi Andreas, AB> The problem I see w/ coop multi-tasking (and I've implemented two coop AB> mt server frameworks in REBOL) is that it's a viral, an all-or-nothing AB> approach. I agree. One of the biggest issues--at least for me--was getting over the initial hurdle of realizing that. The other difficulty is that you often won't realize any benefits in simple applications, so it's easier just to do things directly in response to UI events and such. AB> If I have e.g. disk IO, I've to impl a simple file IO in a AB> coop way, i.e. decompositing it into a state machine w/ small tasks AB> that preferrably don't block. If I've some computing intensive AB> algorithm, once more, I've to state it in a coop way. For me, it's largely an issue of "can I mentally walk through a sequence of events and visualize how the code is going to behave?" For me, the cooperative approach, especially combined with FSMs, tends to make things very clear (and it's portable too! :). For pre-emptive threading, it's very hard to be sure that you're code is really correct. i.e. that it will work correctly in all cases. One reason I find it hard, is that you can't duplicate exact timing or interrupt scenarios. With a cooperative system, it's predictable and reproducible. That is, my I/O may block, and cause a delay, but it won't work "most of the time" and do something potentially *very* bad when it doesn't work--depending on exactly what you're doing of course. AB> I'm in no way an expert in the theoretical issues surrounding this AB> topic, nor am I a REBOL guru. So it may well be that I've missed some AB> nifty ways to write something that won't require complete changes in AB> all my coding habits. I'm not an expert on this either. My bias comes--I think--from how effectively I've used each technique without having to become an expert. For me, the FSM-based stuff I've done for this kind of thing *does* require a different mindset, and I don't use it for very simple things (which is most of what we do I'd guess). For more complex things, I really think it helps me. I have a project with a dynamic UI, that can request various types of remote data (project keys, etc. via Rugby) and display incoming MJPG data. At its core is an FSM. These various event sources feed a queue much like a coop system would work. It may not be the best solution, but it's easy to understand, reliable, and performs well. For testing, I can "stuff" events into the queue; even create entire test scenarios of event sequences. Of course, what works for me may not work for you. :) -- Gregg