📜  并发控制

📅  最后修改于: 2020-12-08 06:43:13             🧑  作者: Mango


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

并发可以使您的应用程序更快,更干净,并为用户提供更好的体验。对于许多开发人员而言,使用多线程似乎很困难,但是API(例如NSOperationDispatch Queues)使在应用程序中轻松使用并发和多线程。

大中央派遣

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

继续练习所学的概念,并尝试根据需要对其进行修改和集成。