標籤:
(1)首先回答什麼是線程
1個進程要想執行任務,必須得有線程.線程是進程的基本執行單元,一個進程(程式)的所有任務都線上程中執行
(2)什麼是多線程
1個進程中可以開啟多條線程,每條線程可以並行(同時)執行不同的任務。 多線程的作用:更新顯示UI介面、處理使用者觸摸事件。 (3)Mach是第一個以多線程方式處理任務的系統,因此多線程的底層實現機制是基於Mach的線程。 (4)開發中實現多線程的方案 1》C語言的POSIX介面:#include<pthread.h> 2》OC的NSThread 3》 C語言的GCD介面(效能最好,代碼更精簡) 4》 OC的NSOperation和NSOperationQueue(基於GCD) 2.線程的通訊 (1)GCD:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下載圖片
UIImage *image = nil;
dispatch_async(dispatch_get_main_queue(), ^{
// 回到主線程
});
(2)NSThread的線程通訊
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下載圖片
UIImage *image = nil;
[self performSelector:@selector(settingImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES modes:nil];
}
這種情況 也適用於子線程之間的通訊。
(3)NSThread的線程通訊
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下載圖片
UIImage *image = nil;
[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:YES];
}
3.網狀圖片處理問題中怎麼解決一個相同的網路地址重複請求的問題
利用字典圖片地址為key,下載操作為value
4. 列舉cocoa中常見對幾種多線程的實現,並談談多安全執行緒的幾種解決辦法及多安全執行緒怎麼控制?
1》開發中實現多線程的方案
1》C語言的POSIX介面:#include<pthread.h> 2》OC的NSThread 3》 C語言的GCD介面(效能最好,代碼更精簡) 4》 OC的NSOperation和NSOperationQueue(基於GCD) 2》多安全執行緒的解決方案 1》只在主線程重新整理訪問UI 2》如果要防止資源搶奪,得用synchronize進行加鎖保護。 3》如果非同步作業要保證安全執行緒等問題,盡量使用GCD。(GCD有些函數預設就是安全的) 5.GCD內部怎麼實現的 1》 iOS和OSX的核心是XNU核心(蘋果電腦發展的作業系統核心),GCD是基於XNU核心實現的。 2》GCD的API全部在libdispatch庫中 3》GCD的底層實現主要有:Dispatch Queue和Dispatch Source Dispatch Queue :管理block操作 Dispatch Source:處理事件(比如說線程間的通訊) 6.GCD和NSOperationQueue 1》GCD是純C語言的API,NSOperationQueue是基於GCD的OC版本的封裝 2》GCD只支援FIFO的隊列,NSOperationQueue可以很方便的調整執行順序,可以添加依賴設定最大並發數量。 3》GCD的執行速度比NSOperationQueue快 4》NSOperationQueue支援KVO,可以檢測Operation是否正在執行,是否結束,是否取消。 如何進行選擇? 任務之間不太相互依賴,選用GCD; 任務之間有依賴,或者要監聽任務的執行情況:NSOperationQueue
iOS-多線程的底層實現