groovyx.gpars.dataflow.operator
Class DataflowSelector

java.lang.Object
  extended by groovyx.gpars.dataflow.operator.DataflowProcessor
      extended by groovyx.gpars.dataflow.operator.DataflowSelector
Direct Known Subclasses:
DataflowPrioritySelector

public class DataflowSelector
extends DataflowProcessor

Dataflow selectors and operators (processors) form the basic units in dataflow networks. They are typically combined into oriented graphs that transform data. They accept a set of input and output dataflow channels so that once values are available to be consumed in any of the input channels the selector's body is triggered on the values, potentially generating values to be written into the output channels. The output channels at the same time are suitable to be used as input channels by some other dataflow processors. The channels allow processors to communicate.

Dataflow selectors and operators enable creation of highly concurrent applications yet the abstraction hides the low-level concurrency primitives and exposes much friendlier API. Since selectors and operators internally leverage the actor implementation, they reuse a pool of threads and so the actual number of threads used by the calculation can be kept much lower than the actual number of processors used in the network.

Selectors select a random value from the values available in the input channels. Optionally the selector's guards mask can be altered to limit the number of channels considered for selection.

Author:
Vaclav Pech Date: Sep 9, 2009

Field Summary
protected  java.util.List<java.lang.Boolean> guards
           
protected  Select select
           
 
Fields inherited from class groovyx.gpars.dataflow.operator.DataflowProcessor
actor, INPUTS, listeners, MAX_FORKS, OUTPUTS, STATE_OBJECT, stateObject
 
Constructor Summary
DataflowSelector(PGroup group, java.util.Map channels, groovy.lang.Closure code)
          Creates a selector After creation the selector needs to be started using the start() method.
 
Method Summary
(package private)  boolean allGuardsClosed()
          Indicates, whether the selector has some guards enabled and so can select a value from the input channels
private static java.lang.String countInputChannels(java.util.Map channels)
           
protected  void doSelect()
          Ask for another select operation on the internal select instance.
 void setGuard(int index, boolean flag)
          Used to enable/disable individual input channels from next selections
 void setGuards(java.util.List<java.lang.Boolean> flags)
          Used to enable/disable individual input channels from next selections
private static boolean verifyChannelParameters(java.util.Map channels, int parameters)
           
 
Methods inherited from class groovyx.gpars.dataflow.operator.DataflowProcessor
addDataflowEventListener, bindAllOutputs, bindAllOutputsAtomically, bindAllOutputValues, bindAllOutputValuesAtomically, bindOutput, bindOutput, extractInputs, extractOutputs, fireAfterRun, fireAfterStart, fireAfterStop, fireBeforeRun, fireControlMessageArrived, fireCustomEvent, fireMessageArrived, fireMessageSentOut, fireOnException, getOutput, getOutputs, getOutputs, getStateObject, checkMaxForks, join, registerChannelListenersToAllInputs, removeDataflowEventListener, reportError, shouldBeMultiThreaded, start, start, terminate, terminateAfterNextRun
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

select

protected final Select select

guards

protected final java.util.List<java.lang.Boolean> guards
Constructor Detail

DataflowSelector

public DataflowSelector(PGroup group,
                        java.util.Map channels,
                        groovy.lang.Closure code)
Creates a selector After creation the selector needs to be started using the start() method.

Parameters:
group - A parallel group to use threads from in the internal actor
channels - A map specifying "inputs" and "outputs" - dataflow channels (instances of the DataflowQueue or DataflowVariable classes) to use for inputs and outputs
code - The selector's body to run each time all inputs have a value to read
Method Detail

verifyChannelParameters

private static boolean verifyChannelParameters(java.util.Map channels,
                                               int parameters)

countInputChannels

private static java.lang.String countInputChannels(java.util.Map channels)

setGuard

public final void setGuard(int index,
                           boolean flag)
Used to enable/disable individual input channels from next selections

Parameters:
index - The index of the channel to enable/disable
flag - True, if the channel should be included in selection, false otherwise

setGuards

public final void setGuards(java.util.List<java.lang.Boolean> flags)
Used to enable/disable individual input channels from next selections

Parameters:
flags - The flags to apply to channels

doSelect

protected void doSelect()
Ask for another select operation on the internal select instance. The selector's guards are applied to the selection.


allGuardsClosed

final boolean allGuardsClosed()
Indicates, whether the selector has some guards enabled and so can select a value from the input channels

Returns:
True, if at least input channel guard is enabled

Copyright © 2008–2012 Václav Pech. All Rights Reserved.