Enables a ParallelArray-based (from JSR-166y) DSL on collections. In general cases the Parallel Array implementation shows to be much faster (10 - 20 times) compared to the executor service implementation in GParsExecutorsPool. E.g.
GParsPool.withPool(5) {final AtomicInteger result = new AtomicInteger(0) [1, 2, 3, 4, 5].eachParallel {result.addAndGet(it)}assertEquals 15, result}GParsPool.withPool(5) {final List result = [1, 2, 3, 4, 5].collectParallel {it * 2}assert ([2, 4, 6, 8, 10].equals(result))}GParsPool.withPool(5) {assert [1, 2, 3, 4, 5].everyParallel {it > 0}assert ![1, 2, 3, 4, 5].everyParallel {it > 1}}
Modifiers | Name | Description |
---|---|---|
static class |
GParsPool.MyCancellableRecursiveTask |
Modifiers | Name | Description |
---|---|---|
private static ThreadLocalPools |
currentPoolStack |
Maps threads to their appropriate thread pools |
private static int |
defaultPoolSize |
Caches the default pool size. |
Constructor and description |
---|
GParsPool
() |
Type | Name and description |
---|---|
private static UncaughtExceptionHandler |
createDefaultUncaughtExceptionHandler() |
private static java.lang.Object |
createPool() Creates a new pool with the default size() |
private static java.lang.Object |
createPool(int poolSize) Creates a new pool with the given size() |
private static java.lang.Object |
createPool(int poolSize, UncaughtExceptionHandler handler) |
static java.lang.Object |
ensurePool(java.util.concurrent.ForkJoinPool pool, groovy.lang.Closure cl) Just like withExistingPool() registers a thread pool, but doesn't install the GParsPoolUtil category. |
static java.util.List<java.util.concurrent.Future<java.lang.Object>> |
executeAsync(groovy.lang.Closure... closures) Starts multiple closures in separate threads, collecting Futures for their return values Reuses the pool defined by the surrounding withPool() call. |
static java.util.List<java.util.concurrent.Future<java.lang.Object>> |
executeAsync(java.util.List<groovy.lang.Closure> closures) Starts multiple closures in separate threads, collecting Futures for their return values Reuses the pool defined by the surrounding withPool() call. |
static java.util.List<java.lang.Object> |
executeAsyncAndWait(groovy.lang.Closure... closures) Starts multiple closures in separate threads, collecting their return values Reuses the pool defined by the surrounding withPool() call. |
static java.util.List<java.lang.Object> |
executeAsyncAndWait(java.util.List<groovy.lang.Closure> closures) Starts multiple closures in separate threads, collecting their return values Reuses the pool defined by the surrounding withPool() call. |
protected static java.lang.Object |
retrieveCurrentPool() Retrieves the pool assigned to the current thread. |
static T |
runForkJoin(AbstractForkJoinWorker<T> rootWorker) Starts a ForkJoin calculation with the supplied root worker and waits for the result. |
static T |
runForkJoin(java.lang.Object... args) Starts a ForkJoin calculation with the supplied root worker and waits for the result. |
static void |
shutdown() |
static java.lang.Object |
speculate(java.util.List<groovy.lang.Closure> alternatives) Runs the supplied closures asynchronously and in parallel, returning the first result obtained and cancelling the other (slower) calculations. |
static java.lang.Object |
speculate(groovy.lang.Closure... alternatives) Runs the supplied closures asynchronously and in parallel, returning the first result obtained and cancelling the other (slower) calculations. |
static java.lang.Object |
withExistingPool(java.util.concurrent.ForkJoinPool pool, groovy.lang.Closure cl) Reuses an instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. |
static java.lang.Object |
withPool(groovy.lang.Closure cl) Creates a new instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. |
static java.lang.Object |
withPool(int numberOfThreads, groovy.lang.Closure cl) Creates a new instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. |
static java.lang.Object |
withPool(int numberOfThreads, UncaughtExceptionHandler handler, groovy.lang.Closure cl) Creates a new instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. |
Methods inherited from class | Name |
---|---|
class java.lang.Object |
java.lang.Object#wait(), java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() |
Maps threads to their appropriate thread pools
Caches the default pool size.
Creates a new pool with the default size()
Creates a new pool with the given size()
Just like withExistingPool() registers a thread pool, but doesn't install the GParsPoolUtil category. Used by ParallelEnhancer's Parallel mixins.
Starts multiple closures in separate threads, collecting Futures for their return values Reuses the pool defined by the surrounding withPool() call. If an exception is thrown from the closure when called on any of the collection's elements, it will be re-thrown in the calling thread when it calls the Future.get() method.
Starts multiple closures in separate threads, collecting Futures for their return values Reuses the pool defined by the surrounding withPool() call. If an exception is thrown from the closure when called on any of the collection's elements, it will be re-thrown in the calling thread when it calls the Future.get() method.
Starts multiple closures in separate threads, collecting their return values Reuses the pool defined by the surrounding withPool() call. If an exception is thrown from the closure when called on any of the collection's elements, it will be re-thrown in the calling thread when it calls the Future.get() method.
Starts multiple closures in separate threads, collecting their return values Reuses the pool defined by the surrounding withPool() call. If an exception is thrown from the closure when called on any of the collection's elements, it will be re-thrown in the calling thread when it calls the Future.get() method.
Retrieves the pool assigned to the current thread.
Starts a ForkJoin calculation with the supplied root worker and waits for the result.
rootWorker
- The worker that calculates the root of the Fork/Join problemStarts a ForkJoin calculation with the supplied root worker and waits for the result.
rootWorker
- The worker that calculates the root of the Fork/Join problemRuns the supplied closures asynchronously and in parallel, returning the first result obtained and cancelling the other (slower) calculations. Typically used to run several different calculations in parallel, all of which are supposed to give the same result, but may last different amount of time each. If the system has enough threads available, the calculations can be test-run in parallel and the fastest result is then used, while the other results are cancelled or discarded.
alternatives
- All the functions to invoke in parallelRuns the supplied closures asynchronously and in parallel, returning the first result obtained and cancelling the other (slower) calculations. Typically used to run several different calculations in parallel, all of which are supposed to give the same result, but may last different amount of time each. If the system has enough threads available, the calculations can be test-run in parallel and the fastest result is then used, while the other results are cancelled or discarded.
alternatives
- All the functions to invoke in parallelReuses an instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. Within the supplied code block the ForkJoinPool is available as the only parameter, collections have been enhanced with the eachParallel(), collectParallel() and other methods from the GParsPoolUtil category class. E.g. calling images.eachParallel{processImage(it}} will call the potentially long-lasting processImage() operation on each image in the images collection in parallel. Be sure to synchronize all modifiable state shared by the asynchronously running closures.
GParsPool.withExistingPool(anotherPool) {GParsPool pool -> def result = Collections.synchronizedSet(new HashSet()) [1, 2, 3, 4, 5].eachParallel {Number number -> result.add(number * 10)}* assertEquals(new HashSet([10, 20, 30, 40, 50]), result) }*
pool
- The thread pool to use, the pool will not be shutdown after this method returnsCreates a new instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. Within the supplied code block the ForkJoinPool is available as the only parameter, collections have been enhanced with the eachParallel(), collectParallel() and other methods from the GParsPoolUtil category class. E.g. calling images.eachParallel{processImage(it}} will call the potentially long-lasting processImage() operation on each image in the images collection in parallel. Be sure to synchronize all modifiable state shared by the asynchronously running closures.
GParsPool.withPool {GParsPool pool -> def result = Collections.synchronizedSet(new HashSet()) [1, 2, 3, 4, 5].eachParallel {Number number -> result.add(number * 10)}* assertEquals(new HashSet([10, 20, 30, 40, 50]), result) }*
cl
- The block of code to invoke with the DSL enabledCreates a new instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. Within the supplied code block the ForkJoinPool is available as the only parameter, collections have been enhanced with the eachParallel(), collectParallel() and other methods from the GParsPoolUtil category class. E.g. calling images.eachParallel{processImage(it}} will call the potentially long-lasting processImage() operation on each image in the images collection in parallel. Be sure to synchronize all modifiable state shared by the asynchronously running closures.
GParsPool.withPool(5) {GParsPool pool -> def result = Collections.synchronizedSet(new HashSet()) [1, 2, 3, 4, 5].eachParallel {Number number -> result.add(number * 10)}* assertEquals(new HashSet([10, 20, 30, 40, 50]), result) }*
numberOfThreads
- Number of threads in the newly created thread poolcl
- The block of code to invoke with the DSL enabledCreates a new instance of ForkJoinPool, binds it to the current thread, enables the ParallelArray DSL and runs the supplied closure. Within the supplied code block the ForkJoinPool is available as the only parameter, collections have been enhanced with the eachParallel(), collectParallel() and other methods from the GParsPoolUtil category class. E.g. calling images.eachParallel{processImage(it}} will call the potentially long-lasting processImage() operation on each image in the images collection in parallel. Be sure to synchronize all modifiable state shared by the asynchronously running closures.
GParsPool.withPool(5, handler) {GParsPool pool -> def result = Collections.synchronizedSet(new HashSet()) [1, 2, 3, 4, 5].eachParallel {Number number -> result.add(number * 10)}* assertEquals(new HashSet([10, 20, 30, 40, 50]), result) }*
numberOfThreads
- Number of threads in the newly created thread poolhandler
- Handler for uncaught exceptions raised in code performed by the pooled threadscl
- The block of code to invoke with the DSL enabledCopyright © 2008–2014 Václav Pech. All Rights Reserved.