1. GCD
1. 同步/異步 串行/併發
dispatch_sync(serial_queue, ^{//任務})
dispatch_async(serial_queue, ^{//任務})
dispatch_sync(concurrent_queue, ^{//任務})
dispatch_async(concurrent_queue, ^{//任務})
複製代碼
- 死鎖
- 緣由
- 隊列引發的循環等待
- 主隊列中所提交的任務不管是同步方式仍是異步方式,都要在主線程中執行
- 同步提交的任務,不管是提交到併發仍是串行隊列,都在當前線程執行
2. dispatch_barrier_async
- 併發隊列實現多讀單寫
3. dispatch_group
// 建立一個group
dispatch_group_t group = dispatch_group_create();
// for循環遍歷各個元素執行操做
for (NSURL *url in arrayURLs) {
// 異步組分派到併發隊列當中
dispatch_group_async(group, concurrent_queue, ^{
//根據url去下載圖片
NSLog(@"url is %@", url);
});
}
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 當添加到組中的全部任務執行完成以後會調用該Block
NSLog(@"全部圖片已所有下載完成");
});
複製代碼
2. NSOperation
配合NSOperationQueue實現多線程方案
- 特色
- 能夠添加任務依賴
- 任務執行狀態控制
- 狀態
- isReady
- isExecuting
- isFinished
- isCancelled
- 若是隻重寫main方法,底層控制變動任務執行完成狀態,以及任務退出
- 若是重寫了start方法,自行控制任務狀態
- 最大併發量
- 支持KVO
3. NSThread
- 啓動流程
- 結合Runloop實現常駐線程
- Start方法
4. 多線程與鎖
- iOS中的鎖
- @synchronized
- atomic
- 修飾屬性的關鍵字
- 對被修飾對象進行原子操做(不負責使用)
- OSSpinLock
- 自旋鎖
- 循環等待詢問,不釋放當前資源
- 用於輕量級數據訪問,簡單的int值+1/-1操做
- NSLock
- NSRrecursiveLock - 遞歸鎖
- dispatch_semaphore_t - 信號量
- dispatch_semaphore_create(1)
- 內部實現
- dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
- 內部實現邏輯
- dispatch_semaphore_signal(semaphore)
- 內部