網絡與多線程(第一天)

1-- 基本概念

01進程

? ? ? 是指在系統中正在運行的一個應用程序。每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內。


02線程

2-1基本概念

? ? 1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程),線程是進程的基本執行單元,一個進程(程序)的所有任務都在線程中執行。

2-2線程的串行

1個線程中任務的執行是串行的,如果要在1個線程中執行多個任務,那么只能一個一個地按順序執行這些任務。也就是說,在同一時間內,1個線程只能執行1個任務。


03--多線程

3-1基本概念

即1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務。


3-2線程的并行

并行即同時執行。比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C。


3-3多線程并發執行的原理

在同一時間里,CPU只能處理1條線程,只有1條線程在工作(執行)。多線程并發(同時)執行,其實是CPU快速地在多條線程之間調度(切換),如果CPU調度線程的時間足夠快,就造成了多線程并發執行的假象


3-4多線程優缺點

優點

1)能適當提高程序的執行效率。

2)能適當提高資源利用率(CPU、內存利用率)

缺點

1)開啟線程需要占用一定的內存空間(默認情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會占用大量的內存空間,降低程序的性能。

2)線程越多,CPU在調度線

程上的開銷就越大。

3)程序設計更加復雜:比如線程之間的通信、多線程的數據共享


04--多線程在iOS開發中的應用

4-1主線程

1)一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”。

2)作用。刷新顯示UI,處理UI事件。

4-2使用注意

1)不要將耗時操作放到主線程中去處理,會卡住線程。

2)和UI相關的刷新操作必須放到主線程中進行處理。


05--iOS中多線程的實現方案

5-1pthread

a.特點:

(1)一套通用的多線程API; ? ?(2)適用于Unix\Linux\Windows等系統 ; (3)跨平臺\可移植 ; ? ??(4)使用難度大 ?

b.使用語言:c語言 ??

?c.使用頻率:幾乎不用 ??

d.線程生命周期:由程序員進行管理


5-2NSThread

a.特點:

1)使用更加面向對象

2)簡單易用,可直接操作線程對象

b.使用語言:OC語言

c.使用頻率:偶爾使用

d.線程生命周期:由程序員進行管理


5-3GCD

a.特點:

1)旨在替代NSThread等線程技術

2)充分利用設備的多核(自動)

b.使用語言:C語言

c.使用頻率:經常使用

d.線程生命周期:自動管理


5-4NSOperation

a.特點:

1)基于GCD(底層是GCD)

2)比GCD多了一些更簡單實用的功能

3)使用更加面向對象

b.使用語言:OC語言

c.使用頻率:經常使用

d.線程生命周期:自動管理


2 pthread

圖1

3 NSThread

(1)NSThread的基本使用

圖2


(2)設置線程的屬性

圖3


(3)線程的狀態(了解)

圖4

(4)線程安全

01 前提:多個線程訪問同一塊資源會發生數據安全問題

02 解決方案:加互斥鎖

03 相關代碼:@synchronized(self){}

04 專業術語-線程同步

05 原子和非原子屬性(是否對setter方法加鎖)


(5)線程間通信

圖5


(6)如何計算代碼段的執行時間

圖6


4--GCD

(1)GCD基本知識

01 兩個核心概念-隊列和任務

02 同步函數和異步函數


(2)GCD基本使用【重點】

01異步函數+并發隊列:開啟多條線程,并發執行任務

02異步函數+串行隊列:開啟一條線程,串行執行任務

03同步函數+并發隊列:不開線程,串行執行任務

04同步函數+串行隊列:不開線程,串行執行任務

05異步函數+主隊列:不開線程,在主線程中串行執行任務

06同步函數+主隊列:不開線程,串行執行任務(注意死鎖發生)

07注意同步函數和異步函數在執行順序上面的差異


(3)GCD線程間通信


圖7


(4)GCD其它常用函數

圖8

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容