推 purpose:虛擬記憶體,不夠用硬碟空間,不受實體記憶體限制 11/19 22:03
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
1.
印象中的ThreadPool是一開始就開啟N條thread
在需要執行特定工作時再喚起閒置中的thread開工
_beginthreadex雖然會回傳一個HANDLE並保證是有效的
但其工作一開始就必須在參數裡指定好
所以就算我手上握有HANDLE
在它完工之後
也只能乖乖的把它CloseHandle()
換句話說
一個thread終其一生就只做同一件事
這樣似乎並沒有達到所謂Pool的概念
如果我沒記錯的話
_beginthreadex和for loop這種東西一樣
都是需要成本的
在有需要時才執行_beginthread
理論上是否會造成效率低落?
個人認為是會
2.
再者
依據平台的不同
可開啟的thread數量亦不相同
以512MB記憶體 每個thread的default stack size 2MB來算
可開啟至多256個thread
我想問的是執行一次_beginthreadex就扣一個可用的thread
而執行一次CloseHandle()就還回去 這樣嗎?
3.
若機器為N核心
是否代表"同時運行"的thread個數以<=N為準則?
因為有看到超過N會有thread互搶資源而導致效率不彰的說法
但其實可開啟的thread個數遠超過核心數
所以對此說法還是有點疑問
以上問題
謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.26.249.44