3

それらがさまざまな種類のタスクに使用されるのはなぜですか? 計算タスクと io タスクを処理するときの違いは何ですか?

Schedulers.computation( ) - イベントループやコールバック処理などの計算作業用。このスケジューラーを I/O に使用しないでください (代わりに Schedulers.io( ) を使用してください)。デフォルトでは、スレッドの数はプロセッサの数と同じです


Schedulers.io( ) - ブロッキング I/O の非同期パフォーマンスなど、I/O バウンドの作業用で、このスケジューラは必要に応じて拡張されるスレッドプールによってサポートされます。通常の計算作業の場合は、Schedulers.computation( ); に切り替えます。デフォルトの Schedulers.io( ) は CachedThreadScheduler であり、スレッド キャッシュを備えた新しいスレッド スケジューラのようなものです。

4

2 に答える 2

9

I/O と計算は非常に異なるワークロードです。

計算は純粋に CPU バウンドであるため、スレッドの数を制限して、CPU をめぐって争って自分自身を枯渇させないようにする必要があります。1000 個のスレッドがすべて 8 コアで処理しようとしている場合、おそらくうまくいかないでしょう。Schedulers.computation() は、コア数に制限されています。

I/O は異なります。通常、コンテキストを維持するためにスレッドが必要ですが、実際には CPU を使用せず、I/O が完了するまでスリープするだけだからです。シングル コア マシンで 1000 回の I/O 操作を行ってもまったく問題ありません。Schedulers.io() は上限がなく、必要な数のスレッドを生成します

于 2016-04-08T14:25:27.903 に答える