GCD 创建异步线程

原创 2015年11月20日 16:24:04

GCD的全称为Grand Central Dispatch,是Apple开发的一个多线程编程解决方法。

进程和线程的概念:


线程是进程中一个独立的执行路径,即主线程,主线程有1M的栈区,对于耗时的执行路径,可以放在子线程(512K栈区)中执行。例如QQ和浏览器 这属于不同的线程,  浏览器中打开多个进程页面;

1:新建线程会消耗内存空间和CPU事件,线程太多会降低系统的运行性能,多线程是通过CPU时分复用实现的。

2:多线程是为了并发执行多项任务,不会提高单个算法本身的执行效率。

iOS中三种多线程技术:

1.NSThread

建立一个线程方便,但是管理多个线程非常困难,但是NSThread的currentThread方法可以跟踪任务所在的线程。

2.GCD (基于C语言的底层API),使用block来定义任务,推荐使用。

3.NSOperation/NSOperationQueue 使用GCD的一套OC API,提供了一些GCD中不易实现的特性。

注:直接使用GCD更好一些。

注:GCD的函数都是以dispatch开头的,dispatch的含义是分派、调度。

注:同步为sync,异步为async

1.串行队列的异步任务:使用一个子线程会依次执行

 <span style="color:#009900;">dispatch_queue_t q = dispatch_queue_create("queue<1>", DISPATCH_QUEUE_SERIAL);
    for (int i = 0; i < 3; i++) {
        dispatch_async(q, ^{
            NSLog(@"%@ i = %d",[NSThread currentThread],i);
    });
    }</span>
打印串行队列的输出发现,i的值是从0到2



2.并行队列的异步任务:使用多个子线程无序执行
  <span style="color:#009900;">dispatch_queue_t q = dispatch_queue_create("queue<2>", DISPATCH_QUEUE_CONCURRENT);  
      
    for (int i = 0; i < 3; i++) {  
        dispatch_async(q, ^{  
            NSLog(@"%@ i = %d",[NSThread currentThread],i);
</span><pre name="code" class="objc"><span style="color:#009900;"> });
    }</span>


分别依次输出的:打印输出,发现i的值是随机排列的:



AFNetwork 3.0 源码解读(二)网络情况监听

继续上篇,前面一节介绍了AFNetwork3.0的一些变化。。这篇文章主要是介绍网络情况监听,在AFNetwork框架中用来监听的类是AFNetworkReachabilityManager。所以我们...

【总结】四个容易混淆的属性:textAligment,contentVerticalAlignment,contentHorizontalAlignment,contentMode

四个容易混淆的属性: 一. textAligment : 文字的水平方向的对齐方式 1> 取值 NSTextAlignmentLeft      = 0,    // 左对齐 NSTextAl...
  • luck28
  • luck28
  • 2015年09月14日 23:24
  • 2432

GCD(一) ---- 进程、线程、队列、同步、异步 概念区分与使用

进程、线程、队列、同步、异步 概念区分以前不时会使用到多线程,但没有进行过总结;正好目前闲来无事,进行一下归纳,方便以后使用。GCD简介Grand Central Dispatch 简称(GCD)是苹...

IOS 部分的GCD 异步线程方法简述

一、工作原理           让程序平行排队的特定任务,根据可用的处理资源,安排其在任何可用的处理器和欣赏执行任务。                      可以是block 或者是函数(fun...

GCD线程基础学习资源

  • 2016年08月09日 11:03
  • 41KB
  • 下载

GCD的定义及使用详解(同步异步、并发串行、线程间通信、延时执行、只执行一次代码)

GCD 1、Grand Central Dispatch是由苹果开发的一个多核编程的解决方案,自动管理现成的生命周期(创建线程、调度任务、销毁线程)。 2、主要包括任务(执行什么操作)和队列(用来存放...

创建线程介绍及 GCD 简单使用

将耗时操作放到线程中进行: 1、NSThread // [NSThread currentThread] 获得当前线程,在开发中经常打印。 所有多线程技术都能使用这个方法 // num...

[zz]谈.Net委托与线程——创建无阻塞的异步调用(二)

了解IAsyncResult          现在我们已经了解,EndInvoke可以给我们提供传出参数与更新后的ref参数;也可以向我们导出异步函数中的异常信息。例如,我们使用BeginInvok...

Android Handler(子线程Handler)异步消息处理机制的妙用(活用信号量) 创建强大的图片加载类

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自【张鸿洋的博客】 最近创建了一个群,方便大家交流,群号:...

谈.Net委托与线程——创建无阻塞的异步调用(二)

了解IAsyncResult          现在我们已经了解,EndInvoke可以给我们提供传出参数与更新后的ref参数;也可以向我们导出异步函数中的异常信息。例如,我们使用Begin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCD 创建异步线程
举报原因:
原因补充:

(最多只允许输入30个字)