自己編寫的threadpool(http://www.oschina.net/code/snippet_102078_2072或者http://jaff20071234.download.csdn.net/),沒有正規的文檔,只能自己編寫程式進行效能測試了。
1。
建立一個threadmanage對象只含有10個線程,同時運行10000個任務,每個任務的工作是迴圈50次列印字串。
建立一個threadmanage對象只含有100個線程,同時運行10000個任務,每個任務的工作是迴圈50次列印字串。
兩次啟動並執行時間差距不大,均需要30多秒,說明此時受到了處理器資源的限制。
測試代碼如下:
CThreadManage threadManage(100);<br /> _sleep(100);<br /> //create 10000 tasks to execute in this threadpool.<br /> CTask task[10000];<br /> int i = 0;<br /> char *data[10000];<br /> for(i = 0; i < 10000; i++)<br /> {<br /> data[i] = (char *)malloc(15);<br /> sprintf(data[i],"task%d",i);<br /> threadManage.Run(&task[i],data[i]);<br /> _sleep(1);<br /> }<br /> _sleep(1000);<br /> clock_t m_sec = clock();<br /> printf("costing time is :%ld",m_sec);
2。
建立一個threadmanage對象只含有10個線程,同時運行10000個任務,每個任務的工作是迴圈50次列印字串。
另外只在一個主線程中運行50*10000次列印輸出,如果運行同樣的任務,按照上面的思路去理解,需要的時間應該要少,
因為是直接調用運行,不需要經過多次函數調用,訊號等待,和任務等待等等。
但是從另外一個角度,此時只有一個線程運行,運用的處理器資源少,所以需要時間要長,結果是45秒左右。
測試代碼如下:
char *data = "thread";<br /> int i = 0;<br /> while(i < 50 * 10000)<br /> {<br /> fprintf(stdout,"%s-%d is running./n",data,i);<br /> i++;<br /> }<br /> clock_t m_sec = clock();<br /> printf("costing time is :%ld",m_sec);
隨便測試了一個100000個任務時,就恐怖了,從上完廁所回來,只執行了20000個,哎,分布式的伺服器才會滿足n多使用者
時的需求吧 ~~~