dispatch_queue_t

GrandCentralDispatch(GCD)技术让任务并行排队执行,简化多线程编程。它使用dispatchqueue管理任务,根据处理资源安排任务执行。串行、并行和主队列分别适用于同步资源访问、多任务并行执行和主线程任务。并行队列通过dispatch_get_global_queue函数获得。

Grand Central Dispatch(GCD)技术让任务并行排队执行,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。

GCD中的队列称为dispatch queue,它可以保证先进来的任务先得到执行通过它能够大大简化多线程编程。工程师只要将要执行的任务(执行代码块)放入队列中,GCD将会为需要执行的任务创建thread,从而放入dispatch queue中,当将任务添加到队列立即安排开始执行。

任务:其是并发程序的执行单位;队列:其是并发程序的管理单位。

第一个程序 Object-C 语言

int main(int argc, const char * argv[]) {
    //创建队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //添加block任务
    dispatch_async(queue, ^{
        printf("hello world\n");
    });
    sleep(2); //若不休眠2秒,主线程就会退出,导致dispatch queue线程也退出。
    return 0;
}
输出:
    hello world

Dispatch queue的实现机制是基于C实现的,并且GCD自动为用户提供了一些dispatch queue,当然也可以自定义一些queue。其中queue类型只有三种:Serial、Concurrent和Main dispatch queue。

Type

Description

Serial(串行)

又称为private dispatch queues,同一时刻只执行一个任务,并按添加到serial的顺序执行。当创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。Serial queue通常用于同步访问特定的资源或数据。

Concurrent(并行)

又称为global dispatch queue,同一时刻可执行多个任务,任务开始执行的顺序按添加的顺序执行,但是执行完成的顺序是随机的,同时可以创建执行的任务数量依赖系统条件。

Main dispatch queue(主队列)

它是全局可用的serial queue,它是在应用程序主线程上执行任务的

并行队列

由于系统已经为每个应用程序创建了四个不同优先级的Concurrent dispatch queue,用户不需要创建Concurrent dispatch queue,只需通过dispatch_get_global_queue 函数获得就可以,其声明如下:

dispatch_queue_t dispatch_get_global_queue(long identifier,long flags);

  • identifier:该属性用于设置queue优先级,有DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_DEFAULT,DISPATCH_QUEUE_PRIORITY_LOW,DISPATCH_QUEUE_PRIORITY_BACKGROUND;
  • flags:该属性是保留值,目前只需设置为0。

PS:虽然dispatch queue是reference-counted对象,但是由于是全局对象,所以不需要手动进行retain 和 release。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值