Class LocalTaskQueue<T>
java.lang.Object
org.apache.sysds.runtime.controlprogram.parfor.LocalTaskQueue<T>
- Direct Known Subclasses:
SubscribableTaskQueue
This class provides a way of dynamic task distribution to multiple workers
in local multi-threaded environments. Its main purpose is inter-thread communication
for achieving dynamic load balancing. A good load balance between parallel workers is crucial
with regard to the overall speedup of parallelization (see Amdahl's law).
From a technical perspective, a thread monitor concept is used for blocking of waiting writers
and readers. Synchronized writes and reads ensure that each task is only read by exactly one
reader. Furthermore, the queue is implemented as a simple FIFO.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidSynchronized (logical) insert of a NO_MORE_TASKS symbol at the end of the FIFO queue in order to mark that no more tasks will be inserted into the queue.Synchronized read and delete from the top of the FIFO queue.voidenqueueTask(T t) Synchronized insert of a new task to the end of the FIFO queue.booleanhasNext()booleanvoidpropagateFailure(DMLRuntimeException failure) toString()
-
Field Details
-
MAX_SIZE
public static final int MAX_SIZE- See Also:
-
NO_MORE_TASKS
-
-
Constructor Details
-
LocalTaskQueue
public LocalTaskQueue()
-
-
Method Details
-
enqueueTask
Synchronized insert of a new task to the end of the FIFO queue.- Parameters:
t- task- Throws:
InterruptedException- if InterruptedException occurs
-
dequeueTask
Synchronized read and delete from the top of the FIFO queue.- Returns:
- task
- Throws:
InterruptedException- if InterruptedException occurs
-
hasNext
public boolean hasNext() -
closeInput
public void closeInput()Synchronized (logical) insert of a NO_MORE_TASKS symbol at the end of the FIFO queue in order to mark that no more tasks will be inserted into the queue. -
isProcessed
public boolean isProcessed() -
propagateFailure
-
toString
-