私がスレッドプールを持っているとしましょう(例はhttp://threadpool.sourceforge.net/かもしれません); そして私はこのコードを持っています:
class Demigod{
public:
Demigod();
void AskObedienceFast();
void AskObedienceSlow();
void WorkHardGodDamn();
~Demigod();
private:
ThreadPool m_PitySlaves;
int m_Quota;
};
Demigod::Demigod() : m_PitySlaves(manyPlease) {
}
void Demigod::WorkHardGodDamn(){
//something irelevant just to annoy slaves
}
void Demigod::AskObedienceFast() {
for(int q=0; q<m_Quota; ++q){
m_PitySlaves.schedule(boost::bind(&Demigod::WorkHardGodDamn, this));
}
m_PitySlaves.wait();
}
void Demigod::AskObedienceSlow() {
ThreadPool poorSouls;
for(int q=0; q<m_Quota; ++q){
poorSouls.schedule(boost::bind(&Demigod::WorkHardGodDamn, this));
}
poorSouls.wait();
}
void main(){
Demigod someDude;
for(size_t i=0; i<dontstop; ++i){
someDude.AskObedienceFast();
}
}
AskObedienceFastは、AskObedienceSlowと比較して高速で機能しますか?このようにして、いくつかのスレッド(スレーブ)を作成し、呼び出しのたびにスレッドプールを作成する時間を無駄にすることなく、いつでも作業の準備を整えることができます。私は自分でコードを検証できることを知っていますが、スレッドプール内のスレッドが待機プロセスを実行しているように、これが根本的にどこかでパフォーマンスを低下させないのであれば、私の質問はもっと広いですか?コストのかかるスレッドプールの初期化(およびスレッド)を回避することになります。