- 论坛徽章:
- 0
|
20可用积分
本帖最后由 2009从-1开始 于 2012-10-03 10:49 编辑
- 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了,有问题就想起大家了^_^
修改了下上面的代码的注释“d根据全局的数据计算得到”,上次描叙的有点小问题 |
最佳答案
查看完整内容
标准STL对多线程支持很成问题的,代码2似乎存在竞争锁的嫌疑代码1,调试看看,是不是存在多线程下的伪共享问题同一CPU物理运算单元上,同一时间上,只能有一个线程运行的。线程不是越多越好的,线程过多,相互切换都会有很大消耗的
|