GPars (formerly GParallelizer)

0.10

Check out the JIRA release notes at http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=12030&version=15793

Project changes

See http://gpars.codehaus.org/Breaking+Changes for the list of breaking changes.

Parallel collections

* Renamed the Parallelizer and Asynchronizer classes to more appropriate GParsPool and GParsExecutorsPool as well as their methods
* Enabled asynchronous closures inside the GParsPool.withPool() methods
* Reorganized the asynchronous closure invocation functionality
* Unified the GParsPool and GParsExecutorsPool functionality to eliminate the need to combine uses of the two classes
* Improved the map/reduce performance by eliminating unnecessary conversions
* Seed values are now allowed for fold() and reduce() methods
* Added findAnyParallel() and countParallel() methods

Fork / Join

* Simplified API to define Fork/Join calculation without the need to create explicit subclasses

Actors

* Restructured actor grouping in order to unify it with agent and dataflow task grouping
* The implicit _call()_ method can be used to send messages

GroovyCSP

* Added a JCSP-wrapping CSP implementation

Dataflow

* A _maxForks_ flag has been added to allow Dataflow operators to internally work concurrently
* Added support for grouping operators and tasks around shared thread pools

Safe

* Reimplemented to increase performance
* Added support for grouping Safe instances around shared thread pools
* Added agent error handling capabilities
* Renamed to *Agent*
* The implicit _call()_ method can be used to update the agent

Other

* Dependency on Jetty has been made optional
* Automated upload of downloadable artifacts
* OSGi support for the GPars jar

0.9

Check out the JIRA release notes at http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=12030&version=15702

Project changes

* Moved to Codehaus - http://gpars.codehaus.org
* Provided a User Guide - http://www.gpars.org/guide/index.html
* Changed the package structure
* Fully built using Gradle
* Continually built on JetBrains public TeamCity site (http://teamcity.jetbrains.com/) and on Codehaus Bamboo (http://bamboo.ci.codehaus.org/browse/GPARS-DEF)
* Experimental OSGi support

Parallel collections

* Map/Reduce
* Transparently parallel methods added allowing to change the sequential semantics of the usual each(), collect() and such methods to a concurrent one
* Parallel methods renamed from xxxAsync to xxxParallel to better capture the nature of the methods. E. g. eachAsync() is now eachParallel().
* New parallel methods added - groupByParallel(), minParallel(), maxParallel(), sumParallel(), foldParallel(), grepParallel()
* The allParallel() method renamed to everyParallel()
* The withParallelizer() and withAsynchronizer() methods have been renamed to doParallel()

Actors

* No need to start actors explicitly after calling the _actor()_ factory method
* Enabled receive() for blocking message read in event-driven actors
* Removed thread-bound actors
* Created a DSL to add message handlers to DynamicDispatchActor at construction time
* The sendAndContinue() method
* Performance improvements
* Reorganized daemon and non-daemon actor groups
* Resizeable thread-pool used by the default actor group
* Modified the reply mechanism
* The message sender property has been added to messages

Dataflow

* Lightweight Dataflow Tasks added
* Full-blown Dataflow Operators created
* The DataFlows class added to provide a convenient container for dataflow variables indexed by either a name or a number
* Bound handlers through the >> operator - register closures, which will get invoked once the dataflow variable gets bound to a value

Safe

* An await() method added to allow callers to synchronize with the agent
* Higher reader priority supported

Other

* Levering GroovyDSL API in IntelliJ IDEA to get IDE support for GPars DSLs
* Added Fork / Join convenience abstraction for hierarchical (divide and conquer) tasks

0.8.4
DataFlows
Improved Gradle build
Maintenance

0.8.3
Enabled Gradle builds
Uploaded into a maven repository

0.8.2
Updated for groovy 1.6.4
Added the await() method to the SafeVariable class
Added the instantVal property to the SafeVariable class to prioritize read requests

0.8.1
Added SafeVariable
Migrated DataFlowStream to Java
Fixed problem with nested actor creation closures
Added short-hand methods for concurrent collection processing to Asynchronizer and Parallelizer

0.8
Added DataFlow concurrency support
Added sendAndWait() methods to actors to block the caller until a reply arrives
Added an experimental option to use the JSR-166y ForkJoin pool for actors
Enabled thread-bound actors to reuse threads from a resizeable common pool
Added AsyncEnhancer and ParallelEnhancer classes enabling asynchronous collection processing through meta-class enhancements
Restructured actor groups with respect to the thread-bound actor thread reuse and Fork/Join pool support
Supported @Immutable for messages
Ability to join actors to await their termination
Ability to suspend actor and message enhancements for replies, which has impact on message delivery speed
Restructured actor classes to increase code reuse
Removed the beforeStop() lifecycle method from actors
Fixed the event-driven actor's loop, when no react is called
DynamicDispatchActor added to allow for an alternative message handling syntax - dynamic method dispatch to multiple onMessage() methods
Added a Reactor implementation - a special purpose actor, which after receiving a message runs its body with the message as a parameter and the result of the code is send in reply.
Several performance benchmarks included
Minor performance optimizations
Bugfixing

0.7
Reply methods for thread-bound actors
Reply methods available on received messages
Ability to send replies between thread-bound and event-driven actors in both directions
Documented structuring actors code and implementing event-driven loops
Overloaded the << operator to perform send
Handling multiple messages in single receive/react
Actor groups, multiple independent configurable thread pools
Gradle build script 

0.6
Event-driven (pooled) actors

0.5
Mixin support
The act() method wrapped with TimeCategory to allow for time DSL in receive() calls

0.4
Actors added

0.3
Set default pool size to Ncpu + 1, where Ncpu is the number of CPU in the system.
Made pool threads to be non-daemon.
Updated documentation.

0.2
Enabled calling withParallelizer() and withAsynchronizer() methods on any object.

0.1
Initial release of the core functionality for both Parallelizer, which uses JSR-166y Parallel Arrays,
and Asynchronizer, which uses Java's executor services.
