📅  最后修改于: 2020-12-08 06:43:13             🧑  作者: Mango
并发是一种同时执行多个事情的方式。在应用程序中,并发是指同时/并发运行的多个任务。
并发可以使您的应用程序更快,更干净,并为用户提供更好的体验。对于许多开发人员而言,使用多线程似乎很困难,但是API(例如NSOperation和Dispatch 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开发人员之前,这已经足够了。
继续练习所学的概念,并尝试根据需要对其进行修改和集成。