java - 线程创建开销包括哪些?
怪我咯
怪我咯 2017-04-18 09:35:45
0
3
591

在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际处理实际的用户请求的时间和资源要多的多。

那么问题来了,创建一个线程到底要有哪些开销?各个开销耗时多么?哪个开销最耗时?
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(3)
伊谢尔伦

通常是 pthread_create

伊谢尔伦

關於時間,創建線程使用是直接向系統申請資源的,這裡調用系統函數進行分配資源的話耗時不好說。
關於資源,Java執行緒的執行緒棧所佔用的記憶體是在Java堆外的,所以是不受java程式控制的,只受系統資源限制,預設一個執行緒的執行緒棧大小是1M(當讓這個可以通過設定-Xss屬性設置,但是要注意棧溢出問題),但是,如果每個用戶請求都新建線程的話,1024個用戶光線程就佔用了1個G的內存,如果系統比較大的話,一下子系統資源就不夠用了,最後程式就崩潰了。

PS:同樣的道理在java程式中也不要隨意開啟新的線程,特別是高頻業務盡量使用線程池,不然很容易導致記憶體不足,程式崩潰的問題。

迷茫

對作業系統來說,創建一個線程的代價是十分昂貴的, 需要給它分配內存、列入調度,同時在線程切換的時候還要執行內存換頁,CPU 的緩存被清空,切換回來的時候也要重新從記憶體中讀取資訊,破壞了資料的局部性。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!