Upload
justin-long
View
565
Download
2
Embed Size (px)
Citation preview
@
Jeremy PierreYet Another Developer
j14159
The Basics of Sane Concurrency
Akka:The Smash and Grab Intro
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Don’t call it a framework
Akka What?
So...?
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
A toolkit for sane concurrency.• Not just about actors• Blocking is bad, event-based is good• Crashing is not the end of the world
The Overview
• Actors and ActorSystems• Supervision(in passing)• Futures and Promises• Some interesting stuff with execution contexts, event buses and schedulers
What I’ll Cover:
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
The Overview
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
What I’ll Cover:
• Actors and ActorSystems• Supervision(in passing)• Futures and Promises• Some interesting stuff with execution contexts, event buses and schedulers
What I’m Not Covering
• Remoting• FSM• Routing/Dispatchers• IO
We use the Librarian Problem:
To help it all make sense...
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
• A Library has one Librarian but many Interns.
• Interns do not know where to find specific books.
• The Librarian can’t go find books for customers because they can then only help one
at a time.
• If the Librarian tells the Interns where to find stuff, many book requests can be
handled at the same time.
The logical extreme of OOP and Information Hiding
Akka Actors
• There’s only one method to make it do stuff(tell / !)• They’re purely event-based• They live in ActorSystems
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
ActorSystem
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
• They make ActorRefs• They’re the root of a hierarchy(think file system)
ActorSystem
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
• They make ActorRefs• They’re the root of a hierarchy(think file system)
ActorSystem
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
• They make ActorRefs• They’re the root of a hierarchy(think file system)
...let us do asynchronous stuff without an Actor
Futures...
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
But where’s the result?
...let us do asynchronous stuff without an Actor
Futures...
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
But where’s the result?
Promises
The “write” side of Futures
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
But that looks kind of boring...
Promises
The “write” side of Futures
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
But that looks kind of boring...
One more Promise
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Using the results of Future/Promise
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
As you’d expect, this gives you another Future:
This callback is for side-effecting:
Event Bus and Scheduler
EventBus is (very) simple pub-sub for Actors:
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Event Bus and Scheduler
EventBus is (very) simple pub-sub for Actors:
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Scheduler?
"Thread.sleep is never fine. It's like drowning a kitten." - @viktorklang
Event Bus and Scheduler
EventBus is (very) simple pub-sub for Actors:
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Scheduler makes stuff happen when you want it to:
Asking and Piping
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
import akka.pattern.ask
Asking and Piping
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
import akka.pattern.ask
import akka.pattern.pipe
Futures and Promises need it
ExecutionContext
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
• It basically hides a java.util.concurrent.Executor• Your ActorSystem’s dispatcher is one• You can create them via configuration or programmatically
Mix Them!
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Never block your ActorSystem’s threads for DB calls!
@
Thank You!
twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com
Jeremy PierreYet Another Developer j14159