線程學習筆記

什麼是進程?

當一個程序開始運行時,它就是一個進程,進程包括運行中的程序和程序所使用到的內存和系統資源。而一個進程又是由多個線程所組成的。

什麼是線程?

線程是程序中的一個執行流,每個線程都有自己的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不同的線程可以執行同樣的函數。

什麼是多線程?

多線程是指程序中包含多個執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務,也就是說允許單個程序創建多個並行執行的線程來完成各自的任務。

多線程的好處:

可以提高CPU的利用率。在多線程程序中,一個線程必須等待的時候,CPU可以運行其它的線程而不是等待,這樣就大大提高了程序的效率。

多線程的不利方面:

線程也是程序,所以線程需要佔用內存,線程越多佔用內存也越多;多線程需要協調管理,所以需要CPU時間跟蹤線程;線程之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;線程太多會導致控制太複雜,最終可能造成很多BUG。

Monitor類

Monitor類可以鎖定一個對象,一個線程只有得到這把鎖才可以對該對象進行操作。對象鎖機制保證了在可能引起混亂的情況下一個時刻只有一個線程可以訪問這個對象。Monitor必須和一個具體的對象相關聯,但是由於它是一個靜態的類,所以不能使用它來定義對象,而且它的所有方法都是靜態的,不能使用對象來引用。舉例如下:

Queue oQueue=new Queue();

……

Monitor.Enter(oQueue);

…//現在oQueue對象只能被當前線程操縱了

Monitor.Exit(oQueue);

Mutex類

可以把Mutex看做一個計程車,乘客看作線程。乘客首先等車,然後上車,最後下次。當一個乘客在車上時,其他乘客就只有等他下車以後才可以上車。而線程與Mutex對象的關係也正是如此,線程使用Mutex.WaitOne()方法等待Mutex對象被釋放,如果它等待的Mutex對象被釋放了,它就自動擁有這個對象,直到它調用Mutex。ReleaseMutex()方法釋放這個對象,而在此期間,其他想要獲取這個Mutex對象的線程都只有等待。


推薦閱讀:

批命筆記(2)
《聶隱娘》拉片筆記
金老學醫筆記
健康之路20150313視頻和筆記:哪些蔬菜可以輔助降血壓 紅酒降血壓喝多少合適
刮痧學習筆記【已更新至第五集】

TAG:學習 | 筆記 | 線程 |