并发控制


并发是一种同时执行多件事的方法。在应用程序中,并发是指多个任务同时/并发运行。

并发可以使您的应用程序更快、更干净,并为用户提供更好的体验。对于许多开发人员来说,使用多线程似乎很困难,但是NSOperationDispatch Queues等 API使得在应用程序中使用并发和多线程变得很容易。

大中央快讯

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 开发人员之前,这些信息已经足够了。

不断练习你所学到的概念,并尝试根据你的要求修改和整合它们。