麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

[iOS多線程&網(wǎng)絡-1.0]-多線程概述

2019-11-14 19:37:47
字體:
供稿:網(wǎng)友
A.進程
什么是進程
進程是指在系統(tǒng)中正在運行的一個應用程序
每個進程之間是獨立的,每個進程均運行在其專用且受保護的內(nèi)存空間內(nèi)
比如同時打開QQ、Xcode,系統(tǒng)就會分別啟動2個進程
通過“活動監(jiān)視器”可以查看Mac系統(tǒng)中所開啟的進程
 
B.線程
主線程、子線程占用內(nèi)存分別是1M和512K
1.什么是線程
1個進程要想執(zhí)行任務,必須得有線程(每1個進程至少要有1條線程)
線程是進程的基本執(zhí)行單元,一個進程(程序)的所有任務都在線程中執(zhí)行
比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執(zhí)行
 
2.線程的串行
1個線程中任務的執(zhí)行是串行的
如果要在1個線程中執(zhí)行多個任務,那么只能一個一個地按順序執(zhí)行這些任務
也就是說,在同一時間內(nèi),1個線程只能執(zhí)行1個任務
比如在1個線程中下載3個文件(分別是文件A、文件B、文件C)
 
3.多線程
什么是多線程
1個進程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務
進程  車間,線程  車間工人
多線程技術(shù)可以提高程序的執(zhí)行效率
比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C)
 
4.多線程原理
多線程的原理
同一時間,CPU只能處理1條線程,只有1條線程在工作(執(zhí)行)
多線程并發(fā)(同時)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度(切換)
如果CPU調(diào)度線程的時間足夠快,就造成了多線程并發(fā)執(zhí)行的假象
思考:如果線程非常非常多,會發(fā)生什么情況?
CPU會在N多線程之間調(diào)度,CPU會累死,消耗大量的CPU資源
每條線程被調(diào)度執(zhí)行的頻次會降低(線程的執(zhí)行效率降低)
 
5.多線程的優(yōu)缺點
多線程的優(yōu)點
能適當提高程序的執(zhí)行效率
能適當提高資源利用率(CPU、內(nèi)存利用率)

多線程的缺點
開啟線程需要占用一定的內(nèi)存空間(默認情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會占用大量的內(nèi)存空間,降低程序的性能
線程越多,CPU在調(diào)度線程上的開銷就越大
程序設計更加復雜:比如線程之間的通信、多線程的數(shù)據(jù)共享
 
6.主線程
什么是主線程
一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”

主線程的主要作用
顯示/刷新UI界面
處理UI事件(比如點擊事件、滾動事件、拖拽事件等)

主線程的使用注意
別將比較耗時的操作放到主線程中
耗時操作會卡住主線程,嚴重影響UI的流暢度,給用戶一種“卡”的壞體驗
 
7.iOS多線程實現(xiàn)技術(shù)
  • pthread
  • NSThread
  • GCD
  • NSOperation
Image(33)
 
C.需要掌握的
多線程
1.NSThread
1> 開線程的幾種方式
* 先創(chuàng)建,后啟動
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];

* 直接啟動
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
[self performSelectorInBackground:@selector(run) withObject:nil];

2> 其他用法
NSThread *current = [NSThread currentThread];
+ (NSThread *)mainThread; // 獲得主線程

3> 線程間通信
performSelectorOnMainThread.....

2.GCD(重點)
1> 隊列的類型
* 并發(fā)隊列
獲得全局的并發(fā)隊列: dispatch_get_global_queue

* 串行隊列
a.自己創(chuàng)建
dispatch_queue_create

b.主隊列
dispatch_get_main_queue

2> 執(zhí)行任務的方法類型
* 同步(sync)執(zhí)行
* 異步(async)執(zhí)行

3> 了解隊列和方法的配合使用

4> 線程間通信
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
   // 執(zhí)行耗時的異步操作...
   dispatch_async(dispatch_get_main_queue(), ^{
       // 回到主線程,執(zhí)行UI刷新操作
   });
});

5> 其他用法
dispatch_once
dispatch_after
dispatch_group_async/dispatch_group_notify

3.NSOperation
1> 基本使用
NSInvocationOperation
NSBlockOperation

2> NSOperationQueue(重點)
* 最大并發(fā)數(shù)設置
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;
 
注意:此方法僅能限制同時執(zhí)行的線程數(shù),不能限制特定的線程(即可能每次執(zhí)行的線程組都是不一樣的)
 
 
* 設置依賴(面試題)
[operationB addDependency:operationA]; // 操作B依賴于操作A

3> 自定義Operation(了解基本流程)

4> 如何解決一張圖片(一個url)重復下載的問題(面試題)
 
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品一区二区在线观看视频 | 看个毛片 | 国产91免费看 | 成人在线视频黄色 | av电影在线观看网站 | 夜间福利视频 | 亚洲网站在线观看 | 极品大长腿啪啪高潮露脸 | 欧美成人精品一区二区男人小说 | 久久人人做 | 欧美一级网| 国产人成免费爽爽爽视频 | 伦一区二区三区中文字幕v亚洲 | 精品一区二区三区中文字幕 | 黄色网址在线播放 | 精品久久久久久久久久久久久久 | 成人福利在线 | 国产精品av久久久久久无 | 99精品无人区乱码在线观看 | 国产羞羞视频 | 欧美黄色一级生活片 | 国产 一区 精品 | 91视频久久 | 一级国产航空美女毛片内谢 | 青草视频在线观看视频 | 精品一区二区三区在线播放 | 欧美hdfree性xxxx | 黄色二区三区 | 涩涩99| 99精品在线视频观看 | 久久久久免费精品国产小说色大师 | 色婷婷久久久亚洲一区二区三区 | 羞羞草视频 | 人成免费网站 | 欧美激情精品久久久久久久久久 | 国产成视频在线观看 | 久久美女免费视频 | 国产理论视频在线观看 | 一级黄片毛片免费看 | 蜜桃av网 | 久久99久久99精品 |