HTML5 专栏程序员

iOS OS X 和 iOS 中的多线程技术-4 (GCD)

2017-12-03  本文已影响126人  石虎132

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄

一、GCD

GCD(Grand Central Dispatch)是 Apple 公司为了提高 OS X 和 iOS 系统在多核处理器上运行并行代码的能力而开发的一系列相关技术,它提供了对线程的高级抽象。GCD 是一整套技术,包含了语言级别的新功能,运行时库,系统级别的优化,这些一起为并发代码的执行提供了系统级别的广泛优化。所以,GCD 也是 Apple 推荐的多线程编程工具。

GCD 是系统层面的技术,除了可以被系统级应用使用,也可以被更普通的高级应用使用。使用 GCD 之后,应用就可以轻松地在多核系统上高效运行并发代码,而不用考虑繁琐的底层问题。GCD 在系统层面工作,能很好地满足所有应用的并行运行需求,将可用系统资源平衡地分配给它们。

GCD 提供了一套纯 C API。但是,它提供的 API 简单易用并且有功能强大的任务管理和多线程编程能力。GCD 需要和 blocks(Objective-C 的闭包)配合使用。block 是 GCD 执行单元。GCD 的任务需要被拆解到 block 中。block 被排入 GCD 的分发队列,GCD 会为你排期运行。GCD 创建,重用,销毁线程,基于系统资源以它认为合适的方式运行每个队列。所以,用户需要关心的细节并不多。

GCD 的使用也很简单,假设抢面包是个耗时操作,前面例子中的 Geroge 和 Totty 的工作都可以实现如下:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

// 并发队列中做耗时操作

while(TRUE) {

if(_cake >0) {

// 耗时操作

[NSThread sleepForTimeInterval:0.5];

_cake--;

_occupied = kSum - _cake;

}else{

break;

}

}

// 主队列中刷新界面

dispatch_async(dispatch_get_main_queue(), ^{

[selfupdateUI];

});

});

谢谢!!!

上一篇下一篇

猜你喜欢

热点阅读