執行緒和程序的小結(未完待續)

2021-09-22 20:14:56 字數 1313 閱讀 4073

程序與執行緒

關係:程序程式的一次執行例項,是cpu等硬體資源分配的最小單位

執行緒是程序中執行運算的最小單位

乙個程序可以有多個執行緒

乙個執行緒只屬於乙個程序

執行緒是一種輕量級程序,與程序相比執行緒的操作給作業系統帶來的建立、維護、管理的負擔要輕,即執行緒的代價或開銷比較小

執行緒的缺點

效能損失

健壯性降低

缺乏訪問控制

程式設計難度提高

執行緒控制

執行緒建立

執行緒終止

執行緒等待

執行緒分離:-----在任意乙個時間點上,執行緒是可結合(joinable)或者是可分離的(detached)。

乙個可結合執行緒是可以被其他執行緒收回資源和殺死的。在被**之前,他的儲存器資源(棧等)是不釋放的。

而對於detached狀態的執行緒,其資源不能被別的執行緒收回和殺死,只有等到執行緒結束才能由系統自動釋放

一組程序中每個程序都無限等待被該組程序中另一程序所占有的資源,而處於的一種僵持局面,若無外力作用,它們都無法向前推進, 這種現象稱為程序死 鎖(deadlock),這組程序就稱為死鎖程序。

死鎖產生的四個必要條件

1.互斥條件:唯一訪問(臨界資源或者說是不共享資源)

2.不可剝奪條件:緊緊**,分不開

3.請求與保持條件:給了我就屬於我,不還

4.環路等待條件: 烏洛波洛斯(咬住尾巴的蛇)

產生:加鎖解鎖的順序不同,死犟,也不看有沒有危險

預防死鎖:破壞必要條件 (設定限制條件,去破環至少一種死鎖產生的必要條件)

避免死鎖:死鎖檢測演算法,銀行家演算法(用某種方法防止進入不安全狀態,即確保始終處於安全狀態)

同步實現:

定義條件變數

初始化條件變數

等待和喚醒

銷毀條件變數

生產者與消費者模型:乙個場所,兩種角色,三種關係

功能:解耦合,支援忙閒不均,支援併發

訊號量:計數器+等待佇列+等待+喚醒

訊號量和條件變數:訊號量與互斥量不同的地方在於,訊號量一般用在多個程序或者執行緒中,分別執行p/v 操作。條件變數一般和互斥鎖同時使用,或者用在管程中。

執行緒池: 以對規定數量/有最大數量限制的執行緒+任務佇列–用於併發處理任務請求

優點:*

避免大量頻繁的執行緒的建立銷毀的時間成本

*避免峰值壓力帶來的瞬間大量執行緒被建立資源耗盡,程式崩潰的危險

三個調研:感謝大佬們的總結

種類和使用場景:

設計模式:

鎖的種類及應用場景:

樹狀陣列小結(未完待續)

最近剛剛深入到了樹狀陣列是什麼,上年寒假學過,但是當時完全聽不到,最近兩天沉下心來,好好看了下,終於懂這個原理是什麼,感覺並不是很難,而且很好用。這個圖應該更好理解 d 1 a 1 d 2 a 1 a 2 d 3 a 3 d 4 a 1 a 2 a 3 a 4 依次類推,6管著5和6 8管著前8項,...

class的用法(未完待續。。。)

一下純屬個人的理解,肯定有不是很正確的地方,望指出,感謝!class是乙個類似於struct的乙個東西,區別就是class中可以 儲存 函式,並且在class中使用,class中的內容可以分為三種狀態 1.public 共有內容,任何人都可使用 2.private 個人私有內容,只有該class本身...

IOS之KVC和KVO 未完待續

kvc key value coding 作用 1 kvc可以給物件的私有變數賦值 2 用於字典轉模型 到後面用mjextension 3 通過kvc取出私有變數值 4 模型物件轉字典 了解 利用kvc賦值 利用kvc取值 使用注意 1 設定key keypath位置的字串必須保證有對應的屬性 或者...