In RxJava there are 5 different schedulers to choose from:
immediate(): Creates and returns a Scheduler that executes work immediately on the current thread.
trampoline(): Creates and returns a Scheduler that queues work on the current thread to be executed after the current work completes.
newThread(): Creates and returns a Scheduler that creates a new Thread for each unit of work.
computation(): Creates and returns a Scheduler intended for computational work. This can be used for event-loops, processing callbacks and other computational work. Do not perform IO-bound work on this scheduler. Use Schedulers.io() instead.
io(): Creates and returns a Scheduler intended for IO-bound work. The implementation is backed by an Executor thread-pool that will grow as needed. This can be used for asynchronously performing blocking IO. Do not perform computational work on this scheduler. Use Schedulers.computation() instead.
Questions:
The first 3 schedulers are pretty self explanatory; however, I'm a little confused about computation and io.
- What exactly is "IO-bound work"? Is it used for dealing with streams (
java.io
) and files (java.nio.files
)? Is it used for database queries? Is it used for downloading files or accessing REST APIs? - How is computation() different from newThread()? Is it that all computation() calls are on a single (background) thread instead of a new (background) thread each time?
- Why is it bad to call computation() when doing IO work?
- Why is it bad to call io() when doing computational work?