问个boost线程池分配任务的问题
- C/C++ code
class D{};class A{ work( D d);};class B{ A a; // 代码1 for ( int 1 = 0; i < 100; i++ ) { D d;//d计算得到,有内存的申请释放 m_threadpool.schedule(boost::bind(&A::work,&a,d)); } // 代码2 vector<D> vd; for( int i = 0; i < 100; i++ ) { D d;//d计算得到,有内存的申请释放 vd.push_back(d); } for( int i = 0; i < 100; i++ ) { m_threadpool.schedule(boost::bind(&A::work,&a,vd.at(i))); }}
开100个线程,代码1和2不同时执行,测试得到的结论:
1、测试一次时,代码1有性能问题,代码2没有
2、代码2多次执行时(循环),也有性能问题
疑问:
1、多线程开多少个合适?与服务器CPU有什么关系?
2、多线程schedule的开销在哪?
好久没来CU了,有问题就想起大家了^_^
[解决办法]
线程数=CPU核心数*2就差不多了。
[解决办法]
是threadpool库吗,有内存泄漏哦
[解决办法]
可以用boost自己的UT工具看一下就知道了
BOOST_AUTO_TEST_CASE( XXX )
{
pool tp(n);
//启动若干个schedule。。。
}
结束时就可以看到