Welcome to GPars - Groovy Parallel Systems
The GPars project offers developers intuitive and safe ways to handle Java or Groovy tasks concurrently by utilizing the power of the Java platform and the flexibility of the Groovy language.
GPars - 'coz concurrency is Groovy
The framework provides straightforward Java or Groovy-based APIs to declare, which parts of the code should be performed in parallel. Collections are enhanced with parallel methods like eachParallel(), collectParallel() and others, to perform [collection-based operations in parallel|Parallelizer]. Also, closures can be turned into [asynchronous functions|Asynchronizer] and these can then be safely composed into complex asynchronous calculations running in the background on your behalf.
The concept of [Actor|Actor]s as an approach to organizing concurrent activities has recently gained new popularity (thanks to the Scala, Erlang, and other programming languages). GPars implements this concept for Java and Groovy developers. With actors support you can quickly create several independent Actors, which consume messages passed to them and communicate with other actors by sending them messages. You then build your solution by combining these actors into a communication network. Groovy actors do not depend on an exclusive thread. You can have much more actors than threads.
For the common scenario that one or multiple results are calculated concurrently but need to be processed as soon as they are available, GPars makes it a breeze to correctly model this with [Dataflow|Dataflow]. Dataflow variables and channels gives you a handy abstraction of single-assignment multiple-read data elements.
Concurrency is all about managing state. If there is no mutable state, concurrency becomes a non-issue. However, as soon as we integrate with Java and it's libraries, we inherently deal with mutable state. What GPars adds to alleviate this situation is the concept of a [Agent|Agent] - a non-blocking mt-safe reference to mutable state that is inspired by "agents" in the Clojure language.
Please refer to the [User Guide|User Guide] for a more extensive coverage of these topics or head over to the [Demos|Demos].
Let the fun begin!
- Concurrent collection processing
- Composable asynchronous functions
- Fork/Join abstraction
- Actor programming model
- Dataflow concurrency constructs
- Agent - an thread-safe reference to mutable state
- STM (Software Transactional Memory)
Project's main priorities
- Clever and clean design
- Elegant Java and Groovy APIs
- Flexibility through meta-programming
- Application-level solutions that scale with number of cores
If you want to start experimenting with GPars right away, use our Fast Track to get up and running within minutes.
What people say about GPars
Check out the User Voices to hear the opinions of people walking here before you.