Know Your Execution Context
Lorenzo Barasti
15MWE December 2016
Table de Matières
- What's an execution context?
- CPU bound and IO bound operations
- Which execution context should I use?
- Conclusions
def executionContext
An Execution Context is an abstraction that lets us schedule and run tasks in a predictable way
(Some) Types of
Execution Context
-
FixedThreadPool
-
SingleThreadExecutor
-
WorkStealingPool
-
ExecutionContext.global
FixedThreadPool
reuses a fixed number of threads operating off a shared unbounded queue
WorkStealingPool - fork/join
- Dynamic number of threads up to a custom level
- Multi-Queue
- No guarantees on the order in which tasks will be executed
CachedThreadPool
creates new threads as needed, but will reuse previously constructed threads when they are available
CPU/IO Bound Operations
CPU bound operations characterise tasks where we focus on computations - e.g. processing data
IO bound operations characterise tasks where we are waiting for data to be sent in or out of our process - e.g. http communication, DB reading/writing
Which EC should I use?
Let's settle it with some very unscientific...
Demo Time!
Conclusions
- Look for the right EC for your use case
- Avoid using the same execution context for different types of operations
- Mind that in this context implementation matters
- Tell your friends!
References
- Docs for Java's Executor
- Introducing thread pools
- Executor's factory methods
- Scala docs for the Global Execution Context
- The Fork/Join framework and a general definition of work stealing
Know Your Execution Context
By Lorenzo Barasti
Know Your Execution Context
- 1,302