[Stackless] Stackless based replacement
andrewfr_ice at yahoo.com
Thu Oct 16 21:52:40 CEST 2008
--- On Wed, 10/15/08, Larry Dickson <ldickson at cuttedge.com> wrote:
> I'm not sure I follow you here: the "mechanism that
> waits for multiple inputs and selects one of them" certainly does not
> look like a channel; it looks like a case statement.
If I understand you correctly, I don't see a big difference (outside of less machinery) between
val = stackless.receive_first([chan1, chan2, ....])
and some construct, let us call it 'synchronizer' (loosely based on the van Aalst workflow pattern - synchronizer). Usually synchronizers are synonymous with barrier synchronization.
val = synchronizer.wait(count) for N consumers, synchronizer.signal(some value) for the producers. In your case, you can wait for one.
chances are channels would be implemented under the hood....
If there is no consumer, a producer blocks. Once a synchronizer is triggered, future producers will raise an exception on a signal until the synchronizer is re-initialized.
Again, I just feel that channels are powerful. However my limited experience has been that scenarios where a single consumer waits on multiple channels can be replaced with a simpler construct that is far more controllable (and use few channels).
More information about the Stackless