從單執行緒應用到多執行緒應用帶來的不僅僅是好處。也會帶來開銷。不要僅僅在乙個應用中使用多執行緒僅僅是因為你能夠(會)使用多執行緒。你應該能確定使用多執行緒帶來的好處要遠遠多於它帶來的花銷。如果不能夠確定,那麼請嘗試測量應用的效能和響應性,不僅僅是猜測。
儘管多執行緒應用的某些部分要比單執行緒應用更加簡單,但是應用的另一些部分會變得更加複雜。當乙個多執行緒應用訪問共享資料時要特別注意。執行緒的互動一點也不簡單。錯誤總是在不正確的執行緒同步中產生,而且很難發現、重現、修復。
當乙個cpu從乙個執行緒切換到另乙個執行緒時,cpu需要儲存當前執行緒的本地資料,程式當前的指標等,然後載入下乙個等待執行的執行緒的本地資料,程式指標等。這種切換被稱之為上下文切換。cpu從執行乙個執行緒切換去執行另乙個執行緒。
上下文切換需要花費很多資源。除非必要,你不要去切換上下文。
你能夠讀更多的資訊關於上下文在維基百科上面。
為了啟動乙個執行緒需要消耗一些計算機的資源。而且乙個執行緒cpu時間(?)需要一些記憶體來儲存它的本地的棧。它也會在作業系統中佔據一些資源來管理執行緒。嘗試建立乙個擁有100個執行緒的程式,每乙個執行緒什麼都不做,僅僅是等待,然後看看當這個應用執行的時候佔據了多少記憶體。
執行緒切換與程序切換以及開銷
為了更好的了解上下文切換,需要我們了解虛擬記憶體的概念。虛擬記憶體是作業系統為每個程序提供的一種抽象,每個程序都有屬於自己的 私有的 位址連續的虛擬記憶體,當然我們知道最終程序的資料及 必然要放到物理記憶體上,那麼必須有某種機制能記住虛擬位址空間中的某個資料被放到了哪個物理記憶體位址上,這就是所謂的...
通過頁表理解程序切換和執行緒切換開銷上的區別
為什麼用多執行緒或多程序?程式的大部分耗時在等待io上,瓶頸不在cpu上時,可以提高cpu利用率 需要集中快速處理大量資料,並且不受先後順序影響 執行緒的實現可以分為兩類 程序切換都需要核心態轉換 程序切換與執行緒切換的最主要區別 程序切換涉及到虛擬位址空間的切換而執行緒切換則不會。因為每個程序都有...
建立執行緒的空間開銷
建立執行緒是一件非常消耗資源的事情。下面的c 可以得到建立乙個執行緒的空間開銷 private static void dumytask private static long getmemoryusageinkb private static void main string args threa...