- 論壇徽章:
- 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計算得到,有內(nèi)存的申請釋放
- m_threadpool.schedule(boost::bind(&A::work,&a,d));
- }
- // 代碼2
- vector<D> vd;
- for( int i = 0; i < 100; i++ )
- {
- D d;//d計算得到,有內(nèi)存的申請釋放
- 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不同時執(zhí)行,測試得到的結(jié)論:
1、測試一次時,代碼1有性能問題,代碼2沒有
2、代碼2多次執(zhí)行時(循環(huán)),也有性能問題
疑問:
1、多線程開多少個合適?與服務器CPU有什么關系?
2、多線程schedule的開銷在哪?
好久沒來CU了,有問題就想起大家了^_^
修改了下上面的代碼的注釋“d根據(jù)全局的數(shù)據(jù)計算得到”,上次描敘的有點小問題 |
最佳答案
查看完整內(nèi)容
標準STL對多線程支持很成問題的,代碼2似乎存在競爭鎖的嫌疑代碼1,調(diào)試看看,是不是存在多線程下的偽共享問題同一CPU物理運算單元上,同一時間上,只能有一個線程運行的。線程不是越多越好的,線程過多,相互切換都會有很大消耗的
|