The GPars (Groovy Parallel Systems) project provides multiple abstractions for concurrent, parallel programming in Groovy and Java. Rather than dealing directly with threads, synchronization, and locks, or even the java.util.concurrent classes added in Java 5, the project allows you to think in terms of actors, data flows, or composable asynchronous functions (to name a few).
In this talk, I covered the basics of GPars, including what it's like to learn to use it. Although I've done a fair amount of concurrent programming, I've just started using GPars. As such, this talk should be suitable for Groovy beginners.
1. For Beginners
A Groovy approach to concurrent programming
Matt Passell May 25, 2011
2. About Me
• Longtime Java developer (since '97)
• Using Groovy on and off since early 2008
• Concurrent programming enthusiast
• Started software consultancy in 2007
• More Groovy + Less Java = More Happy
3. Early History
●
October 2008: Václav Pech creates
GParallelizer
●
September 2009: project renamed
to GPars, moved to Codehaus, and
Groovy luminaries join the team -
(Dierk König, Paul King, Alex Tkachman, Russel
Winder)
4. GPars Has a Logo Contest
http://gpars.codehaus.org/Logo+Contest
5. History
●
October 2008: Václav Pech creates GParallelizer
●
September 2009: project renamed to GPars,
moved to Codehaus, and Groovy luminaries join
the team (Dierk König, Paul King, Alex Tkachman, Russel Winder)
●
December 2009: GPars gets a logo
●
May 2010: 0.10 Release
●
December 2010: 0.11 Release
●
May 2011: 0.12 Beta 1
6. What GPars Provides
●
Code-level Helpers
●
Architecture-level Concepts
●
Protecting Shared Mutable State
7. What GPars Provides
●
Code-level Helpers
●
Fork/Join
●
Map/Reduce (Parallel Collections)
●
Asynchronous Processing*
*not covered in this presentation
8. What GPars Provides
●
Architecture-level Concepts
●
Dataflow Concurrency
●
Actors
●
Communicating Sequential Processes*
*not covered in this presentation
9. What GPars Provides
●
Protecting Shared Mutable State
●
Agents
●
Software Transactional Memory*
*not covered in this presentation
21. Actors
final def doubler = Actors.reactor {
2 * it
}
Actor actor = Actors.actor {
(1..10).each {doubler << it}
int i = 0
loop {
i += 1
if (i > 10) stop()
else {
react {message ->
println "Double of $i = $message"
}
}
}
}
actor.join()
doubler.stop()
doubler.join()
DemoReactor2.groovy
22. Actors
final def doubler = Actors.reactor {
2 * it
}
Actor actor = Actors.actor {
(1..10).each {doubler << it}
int i = 0
loop {
i += 1
if (i > 10) stop()
else {
react {message ->
println "Double of $i = $message"
}
}
}
}
actor.join()
doubler.stop()
doubler.join()
DemoReactor2.groovy
23. Agents
def jugMembers = new Agent<List<String>>(['Me']) //add Me
jugMembers.send {it.add 'James'} //add James
//add Joe using the left-shift operator
final Thread t1 = Thread.start { jugMembers << { it.add 'Joe' } }
final Thread t2 = Thread.start {
jugMembers {it.add 'Dave'} //use the implicit call() method
jugMembers {it.add 'Alice'} //use the implicit call() method
}
[t1, t2]*.join()
println jugMembers.val
jugMembers.valAsync {println "Current members: $it"}
jugMembers.await()
DemoAgent.groovy
24. Resources
●
ReGinA Chapter 17 -
http://manning.com/koenig2/
●
GPars User Guide -
http://gpars.org/0.11/guide/index.html
●
GPars User Mailing List -
http://xircles.codehaus.org/lists/user@gpars.codehaus.org
●
Dierk König's presentation (Concurrent programming for you and me) -
http://skillsmatter.com/podcast/groovy-grails/concurrent-programming-for-you-and-me
●
Alex Miller's DevWorks article -
http://www.ibm.com/developerworks/java/library/j-gpars/index.html
●
Václav Pech's blog -
http://www.jroller.com/vaclav/
25. Credits
●
GPars logo contest entries: various, late 2009. Author: various -
http://gpars.codehaus.org/Logo+Contest
●
Giant Fork: A metal four-pronged fork, Jun 2010. Author: dismal_denizen -
http://www.openclipart.org/detail/65749
●
Tree image: Linde von Linn, Jun 2006. Author: Stefan Wernli -
http://commons.wikimedia.org/wiki/File:Linde_von_linn.jpg
●
George Clooney image: Nov 2006. Author: James White/Corbis Outline -
http://bit.ly/iCSVal
●
Meryl Streep image: 2009. Author: unknown -
http://gosublogger.com/wp-content/uploads/2009/02/meryl-streep.jpg