关于GCD线程的理解

本文介绍了Grand Central Dispatch (GCD),它是Apple为优化多核处理器系统应用设计的解决方案。GCD在Mac OS X 10.6及iOS 4及以上版本可用,基于线程池模型执行并发任务。文章详细探讨了GCD的三种线程队列——主队列(串行且在主线程中执行)、全局队列(并行)以及用户自定义队列,并提到了一些常见的GCD函数,如栅栏函数、dispatch_group_t和信号量函数的使用。

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

Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。GCD详细介绍参考:GCD详解

关于GCD的三种不同的线程队列理解分析:

一.dispatch_get_main_queue

主队列,也是串行队列,所有被添加到主队列中的线程都是主线程。

//MARK:主线程

- (void)doSomeThingsOnMainThread
{
    dispatch_queue_t main_queue = dispatch_get_main_queue();
    
    dispatch_async(main_queue, ^{
        NSLog(@"1:%@",[NSThread currentThread]);
    });
    
    dispatch_async(main_queue, ^{
        NSLog(@"2:%@",[NSThread currentThread]);
    });
    
    dispatch_async(main_queue, ^{
        NSLog(@"3:%@",[NSThread currentThread]);
    });
    
    dispatch_async(main_queue, ^{
        NSLog(@"4:%@",[NSThread currentThread]);
    });
    
    dispatch_sync(main_queue, ^{
        NSLog(@"5:%@",[NSThread currentThread]);
    });
    
    /*
     2018-05-04 15:46:19.627674+0800 GCD几种线程理解[7802:451301] 1:<NSThread: 0x600000067340>{number = 1, name = main}
     2018-05-04 15:46:19.627831+0800 GCD几种线程理解[7802:451301] 2:<NSThread: 0x600000067340>{number = 1, name = main}
     2018-05-04 15:46:19.627977+0800 GCD几种线程理解[7802:451301] 3:<NSThread: 0x600000067340>{number = 1, name = main}
     2018-05-04 15:46:19.628090+0800 GCD几种线程理解[7802:451301] 4:<NSThread: 0x600000067340>{number = 1, name = main}
     */
    /*
        1.从这里我们可以看出主线程队列也是个串行队列,所有被添加到主线程队列上的线程都是主线程,遵循先进先出规则,即FIFO.
        2.在主线程队列中使用同步线程会导致主线程锁死.
        3.被分配的线程都是同一个主线程.
     */
}



二.全局队列 dispatch_get_global_queue

//MARK:全局队列

- (void)doSomeThingsOnGlobalQueue
{
    /*
     #define DISPATCH_QUEUE_PRIORITY_HIGH 2
     #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认
     #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
     #define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
     */
    
    dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    dispatch_async(global_queue, ^{
        NSLog(@"1:%@",[NSThread currentThread]);
    });
    
    dispatch_async(global_queue, ^{
        NSLog(@"2:%@",[NSThread currentThread]);
    });
    
    dispatch_async(global_queue, ^{
        NSLog(@&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值