web-dev-qa-db-ja.com

Rxjava Schedulers.newThread()とSchedulers.io()によるレトロフィット

Retrofitネットワーク要求でSchedulers.newThread() vs 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()はスレッドプールを使用します

しかし、アプリに対するその議論の影響は何ですか?そして、他にどのような側面がありますか?

83
Mikelis Kaneps

Schedulers.io()を使用する利点は、スレッドプールを使用するという事実にありますが、Schedulers.newThread()は使用しないという事実に間違いありません。

スレッドプールの使用を検討する必要がある主な理由は、スレッドプールが、アイドル状態で作業を待機している多数の事前作成スレッドを保持していることです。これは、実行する作業があるときに、スレッドを作成するオーバーヘッドを通過する必要がないことを意味します。作業が完了したら、スレッドを絶えず作成および破棄する代わりに、そのスレッドを将来の作業に再利用することもできます。

スレッドは作成に費用がかかる可能性があるため、オンザフライで作成するスレッドの数を最小限に抑えることは一般に適切です。

スレッドプールの詳細については、以下をお勧めします。

96
Tanis.7x