この問題に直面し、それを解決しなければならない場合は、シングル スレッドのアプローチを使用するだけです。基盤となるメディアを高速化せずに多大な労力を費やす価値はありません。
これが RAM ディスク、または非常に高速な RAID などにあるとします。または、処理が何らかの形で大幅に偏っているとします。シナリオに関係なく、ライン処理に多くの時間がかかるようになりました。
ソリューションを次のように構成します。
class ThreadPool; // encapsulates a set of threads
class WorkUnitPool; // encapsulates a set of threadsafe work unit queues
class ReadableFile; // an interface to a file that can be read from
ThreadPool pool;
WorkUnitPool workunits;
ReadableFile file;
pool.Attach(workunits); // bind threads to (initially empty) work unit pool
file.Open("input.file")
while (!file.IsAtEOF()) workunits.Add(ReadLineFrom(file));
pool.Wait(); // wait for all of the threads to finish processing work units
私の「解決策」は、ニーズに適応できる利用可能なツールについて考えさせることを目的とした、一般的で高レベルの設計です。これを使用するには、慎重に検討する必要があります。これが私が望んでいることです。
他のスレッド操作と同様に、適切に設計するように細心の注意を払ってください。そうしないと、競合状態、データ破損、およびあらゆる種類の苦痛に遭遇します。これを行うスレッドプール/ワークユニットライブラリを見つけることができる場合は、必ずそれを使用してください。