使用 Rxjava Schedulers.newThread() 与 Schedulers.io() 进行改造
Retrofit with Rxjava Schedulers.newThread() vs Schedulers.io()
在 Retrofit
网络请求中使用 Schedulers.newThread()
与 Schedulers.io()
有什么好处。我看过很多使用io()
的例子,但我想明白为什么。
示例情况:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
对
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
我看到的原因之一是 -
newThread()
为每个工作单元创建一个新线程。 io()
将使用线程池
但是这个论点对应用程序有什么影响?还有哪些方面呢?
您说得对,使用 Schedulers.io()
的好处在于它使用了线程池,而 Schedulers.newThread()
则没有。
您应该考虑使用线程池的主要原因是它们维护着一些预先创建的闲置线程和等待工作的线程。这意味着当你有工作要做时,你不需要经历创建线程的开销。一旦您的工作完成,该线程也可以重新用于未来的工作,而不是不断地创建和销毁线程。
线程的创建成本可能很高,因此尽量减少动态创建的线程数通常是好的。
更多关于线程池的内容,推荐:
- What is the use of a Thread pool in Java?
- What is a thread pool?
- Thread pool pattern (Wikipedia)
在 Retrofit
网络请求中使用 Schedulers.newThread()
与 Schedulers.io()
有什么好处。我看过很多使用io()
的例子,但我想明白为什么。
示例情况:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
对
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
我看到的原因之一是 -
newThread()
为每个工作单元创建一个新线程。 io()
将使用线程池
但是这个论点对应用程序有什么影响?还有哪些方面呢?
您说得对,使用 Schedulers.io()
的好处在于它使用了线程池,而 Schedulers.newThread()
则没有。
您应该考虑使用线程池的主要原因是它们维护着一些预先创建的闲置线程和等待工作的线程。这意味着当你有工作要做时,你不需要经历创建线程的开销。一旦您的工作完成,该线程也可以重新用于未来的工作,而不是不断地创建和销毁线程。
线程的创建成本可能很高,因此尽量减少动态创建的线程数通常是好的。
更多关于线程池的内容,推荐:
- What is the use of a Thread pool in Java?
- What is a thread pool?
- Thread pool pattern (Wikipedia)