在iOS開發中,需要用到的多執行緒技術。

2021-07-14 08:51:27 字數 2473 閱讀 6121

目錄:

1、多執行緒的概念

2、多執行緒的執行原理

3、多執行緒的優缺點

4、什麼是主線程?

5、ios中有哪些多執行緒的技術方案

5.1pthread的簡單使用

5.2nsthread的簡單使用

6、執行緒的狀態

7、多執行緒操作共享資源的問題

7、1資源搶奪問題的分析和解決

7、2什麼是互斥鎖,互斥鎖的原理

8、什麼是原子屬性?

9、關於互斥鎖和原子鎖

10、補充

1、多執行緒的概念

要了解什麼是多執行緒,首先必須知道什麼是執行緒?什麼是程序?執行緒

2、多執行緒的執行原理

a. (單核cpu)同一時間,cpu只能處理1個執行緒,只有1個執行緒在執行任務

b.多執行緒同時執行:是cpu快速的在多個執行緒之間的切換

c.cpu排程執行緒的時間足夠快,就造成了多執行緒的"同時"執行的假象

d. 如果執行緒數非常多,cpu會在n個執行緒之間切換,消耗大量的cpu資源

e. 每個執行緒被排程的次數會降低,執行緒的執行效率降低

3、多執行緒的優缺點

缺點 下圖為官方文件中的乙個截圖,需要注意的是,在ios中主線程的棧空間也是512kb,通過控制台的列印我們也可以很容易得出,這個可能是xcode文件更新不太及時。

4、什麼是主線程?

5、ios中有哪些多執行緒的技術方案

5.1pthread的簡單使用

**:pthread_t shabi;

// 建立乙個子執行緒

int result = pthread_create(&shabi, null, demo, null);

if (result == 0)

else

// 這個方法是子執行緒執行的

void *demo(void *pram)

5.2nsthread的簡單使用

nsthread *thread = [[nsthread alloc] initwithtarget:

selfselector:

@selector

(demo:) object:

nil];

[thread start];

[nsthread detachnewthreadselector:

@selector

(demo:) totarget:

selfwithobject:

nil];

[self performselectorinbackground:

@selector

(demo:) withobject:

nil];

6、執行緒的狀態

6、1控制線程的狀態

- (void)start;

執行緒進入就緒狀態,當執行緒執行完畢後自動進入死亡狀態。

+ (void)sleepuntildate:(nsdate *)date;

+ (void)sleepfortimeinterval:(nstimeinterval)ti;

執行緒進入阻塞狀態

+ (void)exit;

執行緒進入死亡狀態

注意:一旦執行緒停止(死亡)了,就不能再次開啟任務

6、2執行緒的屬性

執行緒優先順序

7、多執行緒操作共享資源的問題

當多個執行緒操作同一塊資源時,很容易引發資料錯亂和資料安全問題,資料有可能丟失,有可能增加,有可能錯亂.

7、1資源搶奪問題的分析和解決

問題分析:

問題解決:

7、2什麼是互斥鎖,互斥鎖的原理

@synchronized(

鎖物件)

執行緒執行到synchronized

i. 檢查鎖狀態 如果是開鎖狀態(1)轉到ii  如果上鎖(0)轉到v

ii. 上鎖(0)

iii. 執行**塊

iv. 執行完畢 開鎖(1)

v.   執行緒等待(就緒狀態)

加鎖後程式執行的效率比不加鎖的時候要低,因為要執行緒要等待鎖,但是鎖保證了多個執行緒同時操作全域性變數的安全性

8、什麼是原子屬性?

保證同一時間只有乙個執行緒能夠寫入(但是同乙個時間多個執行緒都可以取值)

單寫多讀:單個執行緒寫入,多個執行緒可以讀取

atomic 

本身就有一把鎖(自旋鎖)

ios開發的建議

9、關於互斥鎖和原子鎖

自旋鎖10、補充

主線程(ui執行緒)

需要用到的Linux命令

1.預設級別轉換為3 文字模式 ln sf lib systemd system multi user.target etc systemd system default.target 2.或者預設級別轉換為5 圖形模式 ln sf lib systemd system graphical.targ...

python需要用到的筆記

總結 pycharm常用的一些命令 建立django專案的 django admin startproject 專案名稱 讓模型類轉變為資料表,生成遷移檔案 python manage.py makemigrations 執行遷移生成表 python manage.py migrate git命令 ...

關於java開發中需要用到的外掛程式總結

報表工具 pentaho reporting ireport dynamicreports等。文件處理 poi itext等。工作流引擎 jbpm openwfe snaker swamp等。作業排程 quartz jobserver oddjob等。快取服務 ehcache memcached s...