併發控制



併發是一種同時執行多個操作的方式。在應用程式中,併發指的是多個任務同時/併發執行。

併發可以使您的應用程式更快、更簡潔,併為使用者提供更好的體驗。許多開發人員認為使用多執行緒很困難,但是像NSOperationDispatch Queues這樣的 API 使在應用程式中使用併發和多執行緒變得容易。

Grand Central Dispatch

GCD 是最常用的 API,用於管理併發程式碼並在系統級別異步執行操作。GCD 提供並使用任務佇列。這些佇列是使用 FIFO 術語的資料結構,即佇列中第一個任務將首先執行,佇列中最後一個任務將最後執行。

例如 - 假設一個電影票預訂隊伍,如果你是最後一個人,你將最後拿到票,如果有人在你之後來,他將在你之後拿到票。

排程佇列

排程佇列是在應用程式中非同步併發執行任務的簡便方法。佇列有兩種型別:

  • 序列佇列 - 它們以序列方式儲存任務,並一次執行一個任務。

  • 併發佇列 - 它們以序列方式儲存任務,並一次執行一個任務。

一些用於建立或獲取佇列的函式有:

dispatch_queue_create       
// create a serial or concurrent queue 
dispatch_queue_get_label     
// get the label of a given queue 
dispatch_get_main_queue   
// get the one and only main queue 
dispatch_get_global_queue    
// get one of the global concurrent queues 

向佇列新增任務

有兩種型別的函式可以幫助向佇列新增任務。他們是:

同步函式 -

  • dispatch_once - 僅在應用程式生命週期結束後提交一次任務。

  • dispatch_sync - 將任務提交到佇列,並在任務完成後返回。

非同步函式 -

  • Dispatch_async - 將提交任務並返回。

  • Dispatch_after - 立即返回,但延遲特定時間。

  • Dispatch_async - 立即返回,但任務被提交多次。

示例程式碼

以下是向佇列新增任務的示例程式碼。

dispatch_async(dispatch_get_main_queue(), update_block);  
// add update_block to main queue  

dispatch_apply(i, some_queue, work_block)  
// add work_block to some_queue i times  

dispatch_sync(background_queue, blocking_block)  
// add blocking block to background queue and wait for completion

使用佇列的一般示例

以下程式碼是使用佇列的示例。

dispatch_async(background_queue, ^ { 
   // Perform code that takes long time, here. 
   Dispatch_async(dispatch_get_main_queue(), ^ { 
      //Some other task, generally UI. 
   }); 
}); 

關於併發控制,我們僅介紹這些內容,因為在您成為中級 iOS 開發人員之前,這些資訊就足夠了。

繼續練習您學到的概念,並嘗試根據您的需求對其進行修改和整合。

廣告

© . All rights reserved.