/* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ /** * A fine-grained parallel computation framework. ForkJoinTasks and * their related support classes provide a very efficient basis for * obtaining platform-independent parallel speed-ups of * computation-intensive operations. They are not a full substitute * for the kinds of arbitrary processing supported by Executors or * Threads. However, when applicable, they typically provide * significantly greater performance on multiprocessor platforms. * * <p> Candidates for fork/join processing mainly include those that * can be expressed using parallel divide-and-conquer techniques: To * solve a problem, break it in two (or more) parts, and then solve * those parts in parallel, continuing on in this way until the * problem is too small to be broken up, so is solved directly. The * underlying <em>work-stealing</em> framework makes subtasks * available to other threads (normally one per CPU), that help * complete the tasks. In general, the most efficient ForkJoinTasks * are those that directly implement this algorithmic design pattern. * * <p>While direct implementation of parallel divide-and-conquer * algorithms is often straightforward, it can also be tedious and * code-intensive. For this reason, a number of solution "templates" * are available for common kinds of operations on lists and arrays: * applying some operation to all elements, combining elements * according to some function, and so on. In this preliminary * release, these are presented via some interfaces describing the * associated code bodies in TaskTypes, along with an evolving set of * implementations for lists and arrays of objects and scalars. */ package jsr166y.forkjoin;