從一個單線程的應用到一個多線程的應用并不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多線程而使用多線程。而應該明确在使用多線程時能多來的好處比所付出的代價大的時候,才使用多線程。如果存在疑問,應該嘗試測量一下應用程式的性能和響應能力,而不隻是猜測。
<code></code>
雖然有一些多線程應用程式比單線程的應用程式要簡單,但其他的一般都更複雜。在多線程通路共享資料的時候,這部分代碼需要特别的注意。線程之間的互動往往非常複雜。不正确的線程同步産生的錯誤非常難以被發現,并且重制以修複。
當cpu從執行一個線程切換到執行另外一個線程的時候,它需要先存儲目前線程的本地的資料,程式指針等,然後載入另一個線程的本地資料,程式指針
等,最後才開始執行。這種切換稱為“上下文切換”(“context
switch”)。cpu會在一個上下文中執行一個線程,然後切換到另外一個上下文中執行另外一個線程。
上下文切換并不廉價。如果沒有必要,應該減少上下文切換的發生。
你可以通過維基百科閱讀更多的關于上下文切換相關的内容:
<a href="http://en.wikipedia.org/wiki/context_switch">http://en.wikipedia.org/wiki/context_switch</a>
線程在運作的時候需要從計算機裡面得到一些資源。除了cpu,線程還需要一些記憶體來維持它本地的堆棧。它也需要占用作業系統中一些資源來管理線程。
我們可以嘗試編寫一個程式,讓它建立100個線程,這些線程什麼事情都不做,隻是在等待,然後看看這個程式在運作的時候占用了多少記憶體。