并发控制

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

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

Grand Central Dispatch

GCD 是最常用的 API,用于管理并发代码并在系统级别异步执行操作。GCD 提供并使用任务队列。这些队列是使用 FIFO 术语的数据结构,即队列中第一个位置的任务将首先执行,队列中最后一个任务将最后执行。

例如 −假设有一条电影票预订线,如果你是最后一个人,你会最后拿到票,如果有人在你之后来,他会在你之后拿到票。

调度队列

调度队列是一种在应用程序中异步和并发执行任务的简单方法。有两种类型的队列 −

  • 串行队列 − 它们以串行方式存储任务并一次执行一个任务。

  • 并发队列 −它们以系列方式存储任务,并一次执行一个任务。

用于创建或获取队列的一些函数是 −

dispatch_queue_create
// 创建串行或并发队列
dispatch_queue_get_label
// 获取给定队列的标签
dispatch_get_main_queue
// 获取唯一的主队列
dispatch_get_global_queue
// 获取全局并发队列之一

将任务添加到队列

有两种类型的函数可帮助将任务添加到队列。它们是 −

同步函数

  • dispatch_once − 仅在应用程序生命周期结束后才提交任务。

  • dispatch_sync − 会将任务提交到队列,并且仅在任务完成时返回。

异步函数

  • Dispatch_async − 会提交任务并返回。

  • Dispatch_after − 立即返回,但会延迟特定时间。

  • Dispatch_async −立即返回,但任务被多次提交。

示例代码

以下是将任务添加到队列的示例代码。

dispatch_async(dispatch_get_main_queue(), update_block);
// 将 update_block 添加到主队列

dispatch_apply(i, some_queue, work_block)
// 将 work_block 添加到 some_queue i 次

dispatch_sync(background_queue,blocking_block)
// 将阻塞块添加到后台队列并等待完成

使用队列的一般示例

以下代码是使用队列的示例。

dispatch_async(background_queue, ^ { 
    // 在这里执行耗时较长的代码。
    Dispatch_async(dispatch_get_main_queue(), ^ {
        //其他一些任务,通常是 UI。
    });
}); 

这就是我们对并发控制所做的全部工作,因为这些信息足以让您成为中级 iOS 开发人员。

继续练习您学到的概念,并尝试根据您的要求修改和集成它们。