執行緒是單個應用中可以併發執行多個**路徑的多種技術之一。
多核讓計算機有了同時執行多個任務的能力。
多現程的優勢:
1.多個執行緒可以提高應用程式的感知響應。
2.多個執行緒可以提高應用車公孽殺在多核系統上的實時效能。
執行緒的狀態:執行、就緒、阻塞。
run loop為執行緒檢測乙個或多個事件源。
run loops 可以讓你使用最小的資源來建立長時間執行的執行緒。
執行緒程式設計的危害之一就是多個執行緒之間的資源爭奪。常用鎖、條件、原子操作和其他技術來同步資源的訪問。
鎖提供了只有乙個執行緒可以執行**的有效保護形式。
建立乙個執行緒:
1.使用nsthread
使用detachnewthreadselector:totarget:withobject:l類方法來生成乙個新執行緒。
2.建立乙個新的nsthread物件,並呼叫它的start方法。
如果擁有乙個nsthread物件,它的執行緒當前正在執行,可以給該執行緒傳送訊息的唯一方法是在你的應用程式的任何物件使用:
performselector:onthread:withobject:waituntildone:方法。但是不能週期的迴圈的使用該方法來實現執行緒間的通訊。
使用posix的多執行緒
posix可移植性作業系統介面
執行緒的中斷,一般建議,讓執行緒正常退出。不鼓勵強制殺死乙個執行緒,強制殺死乙個執行緒,會阻止執行緒本身的清理工作。執行緒分配的記憶體可能造成洩漏,並且其他執行緒當前使用的資源可能沒有被正確清理乾淨,之後造成潛在的問題。
第三章 run loops
run loops 是執行緒相關的基礎框架的一部分。乙個run loop 就是乙個時間處理的迴圈,用來不停地排程工作以及處理輸入事件。
run loop 是讓你的執行緒在有工作的時候工作,無工作的時候處於休眠。
輸入源傳遞非同步事件,通常訊息來自於其他執行緒或程式。
定時源則傳遞同步時間,發生在特定時間或者重複的時間間隔。
第四章執行緒同步
同步工具:
原子操作
記憶體屏障和volatile(易揮發的,變化無常的)
鎖:(鎖型別:mutex互斥鎖、recursive lock遞迴鎖、read-write lock讀寫鎖、distributed lock分布鎖、spin lock自旋鎖、double-checked lock雙重檢查鎖)
大部分鎖型別都合併了記憶體屏障來確保在進入臨界區之前它前面的載入和儲存指令都已經完成。
條件:條件是訊號量的另外一種形式,它允許在條件為真的時候執行緒間互相傳送訊號。
條件和互斥鎖的區別在於多個執行緒被允許同時訪問乙個條件。條件更多是允許不同執行緒根據一些指定的標準通過的守門人。
執行selector例程
同步的成本和效能:
同步能保證**正確執行,但有時候會犧牲部分效能。如發生鎖的爭奪,則會使執行緒進入阻塞。
死鎖:任何時候執行緒檢視同時獲得多於乙個鎖,都有可能引發潛在的死鎖。當兩個不同的執行緒分別保持乙個鎖(而該鎖是另外乙個執行緒需要的)又檢視獲得另外執行緒的鎖時就會發生死鎖。結果是每個執行緒都會進入永續性阻塞狀態,因為它永遠不可能獲得另外那個鎖。
活鎖:當兩個執行緒競爭同乙個資源的時候就可能發生活鎖。
在發生活鎖的情況裡,乙個執行緒放棄他的第乙個鎖並試圖獲得第二個鎖,一旦它獲得第二個鎖,他返回並試圖再次獲得乙個鎖。執行緒就會被鎖起來,因為它花費所有的額時間來釋放乙個鎖,並試圖獲取其他鎖,而不做實際的工作。
避免死鎖和活鎖的最好方法是同乙個時間只擁有乙個鎖。如果你必須在同一時間獲取多於乙個鎖,你應該確保其他執行緒沒有做類似的事情。
執行緒安全總結:
不可變的物件一般是執行緒安全的。可變物件通常不是執行緒安全的。為了在多執行緒應用使用可變物件,應用必須適當的同步。
JAVA學習開發之多執行緒問題
1.程序 每乙個程式都是乙個程序,程序包含乙個程式所需要的所有資源 2.執行緒 用來執行 的工具 3.主線程 乙個程序最少要包含的執行緒 main 程式會自動呼叫主線程的 4.子執行緒 通過主線程開啟的執行緒 執行緒的表現出形式 1.繼承thread類,並重寫run 方法,類似於主線程的main方法...
linux學習軌跡之 多執行緒程式設計
1.加鎖 pthread mutex lock 阻塞 和pthread mutex trylock 非阻塞即當臨界區不空時,跳過該臨界區繼續執行不阻塞 2.pthread create 3.pthread join 4.執行緒結構體pthread t 5.互斥 pthread mutex 鎖 6.同...
C 學習之多執行緒開發技術(六)
執行緒同步之lock鎖 在framework中已經為我們提供了三個加鎖的機制,分別是 monitor類 lock關鍵字 mutex類 都是鎖定資料或是鎖定被呼叫的函式。mutex則多用於鎖定多執行緒間的同步呼叫。簡單的說,monitor和lock多用於鎖定被呼叫端,而mutex則多用鎖定呼叫端。mo...