1.1 什么是多線程
1、多線程是一個比較輕量級的方法來實現(xiàn)單個應(yīng)用程序內(nèi)多個代碼執(zhí)行路徑。在系 統(tǒng)級別內(nèi),程序并排執(zhí)行,系統(tǒng)分配到每個程序的執(zhí)行時間是基于該程序的所需時間 和其他程序的所需時間來決定的。然而在每個應(yīng)程序的內(nèi)部,存在一個或多個執(zhí)行線 程,它同時或在一個幾乎同時發(fā)生的方式里執(zhí)行不同的任務(wù)。
2、支持并發(fā)的應(yīng)用程序開始可以在需要額外的執(zhí)行路徑時候創(chuàng)建一個或多個線程。每個 新的執(zhí)行路徑有它自己獨立于應(yīng)用程序 main 循環(huán)的定制開始循環(huán)。
3、多線程的優(yōu)勢
1.多個線程可以 高應(yīng)用程序的感知響應(yīng)
2 多個線程可以 高應(yīng)用程序在多核系統(tǒng)上的實時性能
4、潛在的問題
1.應(yīng)用程序內(nèi)擁有多個可執(zhí)行路徑,會給你的代碼增加更多的復(fù)雜性;
2.每個 線程需要和其他線程協(xié)調(diào)其行為,以防止它破壞應(yīng)用程序的狀態(tài)信息。
3.因為應(yīng)用程序 內(nèi)的多個線程共享內(nèi)存空間,它們訪問相同的數(shù)據(jù)結(jié)構(gòu)。如果兩個線程試圖同時處理 相同的數(shù)據(jù)結(jié)構(gòu),一個線程有可能覆蓋另外線程的改動導(dǎo)致破壞該數(shù)據(jù)結(jié)構(gòu)。
1.2 線程術(shù)語
- 線程:指獨立于執(zhí)行的代碼段
- 進(jìn)程:指代一個正在運行的可執(zhí)行程序,它可以包含多個線程
- 任務(wù):用于指代抽象的概念,表示需要執(zhí)行的工作
1.3 多線程的替代方法
[圖片上傳失敗]
1.4 線程支持
1.4.1 線程包
包括:Cocoa threads
POSIX threads
Multiprocessing Service
1.4.2 Run Loops
一個 run loop 為 線程監(jiān)測一個或多個事件源。當(dāng)事件到達(dá)的時候,系統(tǒng)喚醒線程并調(diào)度事件到 run loop,然后分配給指定程序。如果沒有事件出現(xiàn)和準(zhǔn)備處理,run loop 把線程置于休 眠狀態(tài)。
為了配置 run loop,你所需要做的是啟動你的線程,獲取 run loop 的對象引用, 設(shè)置你的事件處理程序,并告訴 run loop 運行。
1.4.3 同步工具
如果多個線程在同一個時間 試圖使用或者修改同一個資源,就會出現(xiàn)問題。你可能必須使用鎖,條件,原子操作和其他技術(shù)來同步資源的訪問
1.4.4 線程間通信
線程可能需要處理新的工作要求,或向你應(yīng)用程 序的主線程報告其進(jìn)度情況。在這些情況下,你需要一個方式來從其他線程獲取信息。線程共享相同的進(jìn)程空間,意味著你可以有大量的可選項來進(jìn)行通信。
Direct messaging 直接通信
Global variables, shared memory, and objects 共享變量、內(nèi)存和對象