Rubyに限らない一般的な質問です。

複数のIOオブジェクトがあって、それぞれがアトランダムにreadable, writableになる場合の効率的な処理の仕方についてです。
selectを使うことでreadableあるいはwritableになったオブジェクトを教えてもらうことで
シングルスレッドで、それぞれのIOオブジェクトに対して適切な処理を行うことができると分かりました。
mainルーチン → IO.select([object1, object2, ..., objectN]) → 固有の処理

ところが処理対象のIOオブジェクトが有限なら各IOオブジェクト毎に以下のように行うほうがスループットは改善されるのでしょうか?
mainルーチン → n.times do thread.new(object) → IO.select(object) → 固有の処理

reactorパターンというものについて調べるとシングルスレッドでの実装例をよく見るのですが、
実際には「固有の処理」の中にIO待ちの要素がある場合はマルチスレッド化させることで多重度を持たせて
スループットを改善できるのではないかと考えました。
それとも、IO処理を全て一手に引き受けるスケジューラを作り、
IO処理は全てそこに丸投げしてコールバックするのが正しいreactorパターンなのでしょうか?
「スケジューラにクエリを入れる」という仕組みをどう書けばいいのか分かりません。