GCD 创建异步线程

GCD(Grand Central Dispatch)是Apple的多线程解决方案。本文介绍了进程和线程的概念,强调了多线程可能带来的性能影响,并比较了iOS中三种多线程技术:NSThread、GCD和NSOperationQueue。GCD因其简洁和高效的特性,被推荐使用。特别是,异步任务在串行队列中会按顺序在子线程执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的值是随机排列的:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值