首页 > 编程知识 正文

GCD是啥,GCD是指什么

时间:2023-05-03 09:31:02 阅读:213861 作者:3782

1. 什么是GCD

GCD,全称是Grand Central Dispatch,它是C语言的API.
GCD的核心 : 将block(任务)添加到queue(队列)中.

官方文档的描述:

Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并执行任务,这样就比以前的线程更有效率.

2.日常使用 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); /** * 长时间处理 * * 例如 AR 用画像识别 * 例如数据库访问 */ dispatch_async(queue, ^{ /** * 长时间处理结束,主线程使用该处理结果 */ dispatch_async(dispatch_get_main_queue(), ^{ /** * 只有在主线程可以执行的处理 * * 例如用户界面更新 */ }); });

在GCD之前,Cocoa框架提供了NSObject类的performSelectorInBackground:withObject:实例方法和performSelectorOnMainThread:withObject:waitUntilDone:实例方法等简单的多线程编程技术.
以下方法等价于GCD的实现:

/** * NSObject performSelectorInBackground: withObject:方法中 * 执行后台线程 */- (void)launchThreadByNSObject_performSelectorInBackground_withObject{ [self performSelectorInBackground:@selector(doWork) withObject:nil];}- (void)doWork{ /** * 因为书本是基于MRC环境所写,所以包含自动释放池,若在ARC环境下,以下语句会报错. */ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; /** * 长时间处理 * * 例如 AR 用画像识别 * 例如数据库访问 */ /** * 长时间处理结束,主线程使用该处理结果 */ [self performSelectorOnMainThread:@selector(doneWork) withObject:nil waitUntilDone:NO]; [pool drain];}- (void)doneWork{ /** * 只有在主线程可以执行的处理 * * 例如用户界面更新 */} 3.多线程执行原理总结

单核CPU同一时间,CPU只能处理1个线程,只有1个线程在执行任务.
多线程的同时执行 : 其实是CPU在多条线程之间快速切换(调度任务).
如果CPU调度线程的速度足够快,就造成了多线程同时执行的假象.
在多核CPU的情况下,就真正并行执行多个线程.
因为长时间的处理(耗时操作),会妨碍主线程的运行循环的执行,所以需要进行多线程编程,如:异步创建子线程去处理耗时操作,耗时操作结束后,再回到主线程刷新UI.这种方式不会妨碍主线程的运行循环的执行,并能提高程序响应性能.

参考文献

《Objective-C高级编程 iOS与OS X多线程和内存管理》
<iOS读书笔记>之Objective-C高级编程(GCD)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。