美文网首页
GCD介绍(二): 多核心的性能

GCD介绍(二): 多核心的性能

作者: 傻傻小萝卜 | 来源:发表于2016-05-16 23:15 被阅读18次

概念

为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)。在低层,GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用,就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同的工作线程池(除非你的用户队列的目标是主线程,但是为了提高运行速度,我们绝不会这么干)。

有两种途径来通过GCD“榨取”多核心系统的性能:将单一任务或者一组相关任务并发至全局队列中运算;将多个不相关的任务或者关联不紧密的任务并发至用户队列中运算;

全局队列

设想下面的循环:

for(id obj in array)

[self doSomethingIntensiveWith:obj];

假定-doSomethingIntensiveWith:是线程安全的且可以同时执行多个.一个array通常包含多个元素,这样的话,我们可以很简单地使用GCD来平行运算:

dispatch_queue_t

queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,

0);

for(idobj

in array)

dispatch_async(queue,

^{

[selfdoSomethingIntensiveWith:obj];

});

如此简单,我们已经在多核心上运行这段代码了。

当然这段代码并不完美。有时候我们有一段代码要像这样操作一个数组,但是在操作完成后,我们还需要对操作结果进行其他操作:

for(id obj in array)

[self doSomethingIntensiveWith:obj];

[self doSomethingWith:array];

这时候使用GCD的dispatch_async就悲剧了.我们还不能简单地使用dispatch_sync来解决这个问题, 因为这将导致每个迭代器阻塞,就完全破坏了平行计算。

解决这个问题的一种方法是使用dispatch group。一个dispatch group可以用来将多个block组成一组以监测这些Block全部完成或者等待全部完成时发出的消息。使用函数dispatch_group_create来创建,然后使用函数dispatch_group_async来将block提交至一个dispatch queue,同时将它们添加至一个组。所以我们现在可以重新编码:

dispatch_queue_t

queue = dispatch_get_global_qeueue(DISPATCH_QUEUE_PRIORITY_DEFAULT,

0);

dispatch_group_t

group = dispatch_group_create();

for(idobj

in array)

dispatch_group_async(group,

queue, ^{

[selfdoSomethingIntensiveWith:obj];

});

dispatch_group_wait(group,

DISPATCH_TIME_FOREVER);

dispatch_release(group);

[self doSomethingWith:array];

如果这些工作可以异步执行,那么我们可以更风骚一点,将函数-doSomethingWith:放在后台执行。我们使用dispatch_group_async函数建立一个block在组完成后执行:

相关文章

  • GCD介绍(二): 多核心的性能

    概念 为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)...

  • GCD入门(二)多核心的性能

    转自此处 概念 为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GC...

  • GCD介绍

    一、GCD简单介绍 什么是GCD GCD优势 任务和队列 GCD有2个核心概念 GCD的使用就2个步骤 将任务添加...

  • NSOperation的基本使用

    NSOperation的介绍 NSOperation是基于GCD的封装,它的底层其实就是GCD 核心概念队列 + ...

  • GCD初探

    1. GCD介绍 什么是GCD?GCD全称是Grand Central Dispatch,纯C语言,提供了非常多强...

  • 函数与队列 和gcd原理分析(上)

    GCD 介绍 什么是GCD? 全称是Grand Central Dispatch 纯C语⾔,提供了⾮常多强⼤的函数...

  • iOS - GCD

    目录 GCD简介 GCD核心概念 GCD队列的使用 GCD的常见面试题 GCD简介 Grand Central D...

  • 【iOS基础】多线程剖析之GCD

    这篇介绍GCD 什么是GCD1- 全称Grand Central Dispatch2- 它是纯C语言开发的一套多线...

  • GCD的简单使用

    一. GCD基本知识 两个核心概念 队列和任务 同步函数和异步函数 二. GCD基本使用 异步函数+并发队列 : ...

  • iOS多线程(二)GCD

    一、GCD两个核心概念: 任务:执行什么操作; 队列:用来存放任务。 二、GCD使用的两个步骤: 定制任务:确定想...

网友评论

      本文标题:GCD介绍(二): 多核心的性能

      本文链接:https://www.haomeiwen.com/subject/vmucrttx.html