thread th =
newthread(opthread);
th.isbackground =
true;
th.start();
private
void
opthread()
catch (system.exception ex)
finally
}
#region 最大執行緒測試
list_lstthread = new list();
private
void
btncreat_click(object sender, eventargs e)
private
void
createthread()
個", maxcount));
for (int i = 0; i < maxcount; i++)
個", i+1));
_lstthread.add(th);
thread.sleep(10);
}addtipmsg(string.format("列表中有執行緒數:", _lstthread.count));
}private
void
opthread()
catch (system.exception ex)
finally
}#endregion
public
void
addtipmsg(string src)
\r\n", datetime.now.tostring("hh:mm:ss"), src);
txttipmsg.text = str;
}));
}public
void
settip(string src)
));}
static void main()
.threadexceptioneventargs e)
static void unhandledexceptioneventhandler(object sender, unhandledexceptioneventargs e)
4、 程序編譯
在64位win7下,可以將目標編譯成32位或64位的程式,如下圖所示:
5、 實際測試
1)32位程序
執行前記憶體占用:
執行後記憶體占用:
執行後程式介面:顯示的執行緒和任務管理器稍有不同,任務管理器是定時重新整理程序資訊的。每個執行緒平均占用記憶體約1.1m。
同時程式報如下錯誤:
多執行幾次會發現,最大建立的執行緒數會有差別,但都在個位數。
2)64位程序
執行程式並直到出錯後可以看到,
a) 程式記憶體占用已近13g;
b) 執行緒最大建立數量3138個;平均每個執行緒占用記憶體4.1m;
c) 作業系統報記憶體溢位錯誤;
記憶體占用:
程式介面:
作業系統報錯:
四、 總結
在本機環境下,由上可得出以下結論:
1、32位程序最大可建立執行緒1335個左右,共佔記憶體1.5g,每個執行緒占用記憶體約1.1m;雖然沒有測試此時程序的運**況,但可以推斷出,此時程序已無法正常工作。
2、64位程序最大可建立執行緒數3138個,共佔記憶體13g,每個執行緒占用記憶體約4.1m;此時作業系統報記憶體溢位。程序無法正常執行。
根據工作中的經驗,多執行緒的程式建立執行緒最好控制在200以內,否則程式的效能將會受到影響。這一點在監控系統中要尤為注意,監控系統中往往會多個裝置建立socket連線,通常採用1個執行緒管理1個連線的方式實現。但是,在裝置數量過多時(如:幾千個裝置),就需要本文提到的最大執行緒數量的問題,怎樣進行管理,就需要特別注意。我會在後續的文章中進行分析。
每個執行緒塊中最大執行緒問題
1 每個block 最大1024個執行緒 視不同的卡來定 這個是執行緒總數的限制。2 每個執行緒塊最大維度的限制為x方向1024,y方向1024,z方向64 視不同的卡來定 3 乙個執行緒塊的執行緒情況同時收到上述兩條的約束,即,如果在x方向排布了1024個執行緒,那麼y和z方向的維度只能是1,否則...
Linux最大執行緒數限制
開始以為是記憶體不足導致無法建立執行緒,把jvm的 xms,xmx的2個引數都加大一倍 xms2048m xmx2048m。把 xss引數調小,還是啟動失敗。應該是系統方面的限制了,這台機器上搞了100個過tomcat程序,還有不少其他軟體,東西比較多且雜。確認過機器的記憶體還是足夠的,先排查系統引...
Linux下能夠建立的最大執行緒數
1.首先可以執行下面的程式檢查,檢查你現在的系統總共能建立多少個執行緒。我的系統上是i 380,也就是最多能建立380個執行緒。後面分析為什麼是它。maxthread.cc compile gcc maxthread.cc o thread lpthread include include incl...