假设我有一个线程池(例如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();
}
}
与 AskObedienceSlow 相比,AskObedienceFast 能否更快、更有效?这样我就可以拥有一些线程(从属)并随时准备工作,而不必在每次调用时浪费时间创建线程池。我知道我可以自己验证代码,但我的问题更广泛,如果这不是从根本上失去其他地方的性能,比如线程池中的那些线程做一些等待过程?它归结为避免昂贵的线程池初始化(和线程)。