TThreadPoolのスレッドプーリング数をカスタマイズするには?
概要
TThreadPoolクラスは、並列プログラミングライブラリで使用するスレッドプーリング数を管理しています。
「並列プログラミングでのスレッドプーリングの概要」でも解説していますが、通常では
開発者がスレッドプーリング数を変更する必要はなく、ThreadPoolのデフォルトの設定で使用することを推奨しています。
ただ、開発者が実行環境のコア数を把握し、独自にスレッド数を制御したい時は、どうすれば良いのでしょうか?
このサポート情報では、TThreadPoolのスレッドプーリング数をカスタマイズする方法について解説いたします。
解説
TThreadPoolのスレッドプーリング数をカスタマイズするには、SetMaxWorkerThreadsメソッドでスレッド数を変更できます。
ただし、デフォルトのTThreadPoolのスレッドプーリング数を変更しないでください。
その理由としてデフォルトのTThreadPoolは、アプリケーション全体で共有されているグローバルインスタンスであり、別のアプリケーションから使用されている可能性があるため、これを変更するとアプリケーション全体に影響します。
そのため、TThreadPoolの独自のインスタンスを作成してください。
以下は、スレッドプーリング数= 10に設定する簡単なコード例です。
Delphiの場合:
var
Pool: TThreadPool;
begin
Pool:=nil;
..
..
if Pool = nil then
begin
Pool := TThreadPool.Create;
Pool.SetMaxWorkerThreads(10);
ShowMessage('スレッド数='+IntToStr(Pool.MaxWorkerThreads));
end;
end;
C++Builderの場合:
TThreadPool *Pool=NULL;
..
..
if (Pool == NULL) {
Pool=new TThreadPool();
Pool->SetMaxWorkerThreads(10);
ShowMessage(L"スレッド数="+IntToStr(Pool->MaxWorkerThreads));
}
MaxWorkerThreadsの値は、TThread.ProcessorCountから設定されるMinimumWorkerThreads値よりも常に大きくなければならないことに注意してください。