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

首頁 > 學院 > 開發設計 > 正文

[iOS多線程&網絡-1.0]-多線程概述

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

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

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

主線程的使用注意
別將比較耗時的操作放到主線程中
耗時操作會卡住主線程,嚴重影響UI的流暢度,給用戶一種“卡”的壞體驗
 
7.iOS多線程實現技術
  • pthread
  • NSThread
  • GCD
  • NSOperation
Image(33)
 
C.需要掌握的
多線程
1.NSThread
1> 開線程的幾種方式
* 先創建,后啟動
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> 隊列的類型
* 并發隊列
獲得全局的并發隊列: dispatch_get_global_queue

* 串行隊列
a.自己創建
dispatch_queue_create

b.主隊列
dispatch_get_main_queue

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

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

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

5> 其他用法
dispatch_once
dispatch_after
dispatch_group_async/dispatch_group_notify

3.NSOperation
1> 基本使用
NSInvocationOperation
NSBlockOperation

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庆阳市| 来安县| 安宁市| 商洛市| 开化县| 改则县| 平阳县| 黔南| 濮阳县| 松溪县| 嘉兴市| 哈密市| 嘉定区| 武穴市| 建瓯市| 荔波县| 长垣县| 九台市| 荆州市| 中山市| 通辽市| 育儿| 城口县| 福海县| 黔江区| 成都市| 泾阳县| 牡丹江市| 方正县| 即墨市| 班玛县| 政和县| 关岭| 盐源县| 舒城县| 包头市| 吴旗县| 怀集县| 司法| 北宁市| 广安市|