国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS多線程介紹

2019-10-21 18:54:12
字體:
供稿:網(wǎng)友
這篇文章主要介紹了iOS多線程的相關(guān)知識,涉及到對進程,線程等方面的知識講解,本文非常具有參考價值,感興趣的朋友一起學習吧
 

一、前言部分

最近在面試,重新溫習了一遍多線程,希望加深一遍對于多線程的理解。

1、什么是進程?

1).要了解線程我們必須先了解進程,通俗來講進程就是在系統(tǒng)中運行的一個應用程序。

2).每個線程之間是獨立存在的,分別運行在其專用的且受保護的內(nèi)存空間中。

3).比如打開QQ或Xcode系統(tǒng)會分別開啟兩個進程 如圖:

iOS,多線程

4)、我們可以通過"活動監(jiān)視器"查看Mac系統(tǒng)中所開啟的進程。

2、什么是線程?

1).一個進程要想執(zhí)行任務(wù)必須得有線程,即一個進程至少要有一個線程。

2).線程是進程的基本執(zhí)行單元,一個進程(程序)的所有任務(wù)都是在線程中執(zhí)行的。

3).比如使用酷狗播放音樂、使用迅雷下載電影都需要在線程中運行 如圖:

3、什么是線程的串行?

iOS,多線程

1).一個線程中任務(wù)是串行執(zhí)行的(順序執(zhí)行)的,也就是說一個線程同一時間內(nèi)只能執(zhí)行一個任務(wù)。

2).串行執(zhí)行圖解,比如一個線程下載3個文件(文件A、B、C)

iOS,多線程

4、什么是多線程?

1).一個進程中可以開啟多個線程,每個線程可以并發(fā)(同時)執(zhí)行不同的任務(wù)。

2).類似關(guān)系列舉:進程---->車間;線程---->車間工人

3).多線程圖解,比如同時開啟3個線程分別下載3個文件(文件A、B、C)

iOS,多線程

5、多線程原理

1).同一時間CPU只能執(zhí)行一個線程,只有一個線程在工作(執(zhí)行)。

2).多線程并發(fā)(同時)執(zhí)行,其實是CPU快速的在多個線程之間調(diào)度(切換)。

3).如果CPU調(diào)度線程的速度夠快,就會造成多線程并發(fā)執(zhí)行的假象。

4).多線程的缺點:

1、每個線程都會占用一定的內(nèi)存空間(默認情況下:主線程占用1MB,子線程占用512KB),

如果開啟線程過多會占用大量的內(nèi)存空間因而造成程序性能降低。

2、線程越多CPU調(diào)度線程上的開銷就越大(類似工廠工人越多,工廠開銷也越大)。

3、使程序設(shè)計更復雜:比如多線程的數(shù)據(jù)通信,多線程之間的數(shù)據(jù)共享。

5).多線程的優(yōu)點:

1、能適當提高程序的執(zhí)行效率。

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

6、什么是主線程?

1).一個iOS程序開啟后默認會開啟一個線程,這個線程被稱為"主線程"或"UI線程"。

2).主線程的主要作用:

1、顯示/刷新UI界面

2、處理UI事件(比如點擊事件、滾動事件、拖拽事件等)

3).主線程注意點:

1、別將耗時的操作放在主線程中,耗時操作放在主線程中會造成程序卡頓的問題。

7、耗時操作Demo演示

1)、直接在主線程中運行的Demo

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//獲取當前執(zhí)行方法和當前線程//number== 主線程//number!= 其他線程、子線程、次線程NSLog(@"%s----%@",__func__,[NSThread currentThread]);//直接在主線程中運行 造成UI操作卡頓[self longTimeOperation];}#pragma mark-耗時操作-(void)longTimeOperation{for (int i=; i<; i++) {NSLog(@"%d",i);}}

2)、在子線程中運行的Demo

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//獲取當前執(zhí)行方法和當前線程//number== 主線程//number!= 其他線程、子線程、次線程NSLog(@"%s----%@",__func__,[NSThread currentThread]);//將耗時操作放在子線程中執(zhí)行,不影響UI的操作[self performSelectorInBackground:@selector(longTimeOperation) withObject:nil];}#pragma mark-耗時操作-(void)longTimeOperation{for (int i=; i<; i++) {NSLog(@"%d",i);}}

以上內(nèi)容是小編給大家介紹的ios多線程知識,希望對大家有所幫助!



注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 陈巴尔虎旗| 秦安县| 河南省| 左权县| 蚌埠市| 温宿县| 获嘉县| 洪江市| 长丰县| 西峡县| 望都县| 灵寿县| 轮台县| 连山| 乐昌市| 东至县| 隆德县| 宜春市| 隆尧县| 张家界市| 辛集市| 高要市| 新竹市| 阜新市| 阳新县| 海林市| 始兴县| 龙泉市| 吉安县| 徐闻县| 建湖县| 修水县| 怀安县| 罗定市| 辽阳县| 县级市| 乾安县| 保山市| 增城市| 扬州市| 临猗县|