GCD
多核编程、自动管理线程的生命周期(创建线程,调度任务,销毁线程)
一、GCD 的【任务】与【队列】
1.任务:在线程中执行的代码(block块),有2种任务类型。
【同步执行/sync】:
同步将任务添加到指定队列中,不能开启新线程,任务执行结束前一直等待。
【异步执行/async】:
异步将任务添加到指定队列中,能开启新线程,任务执行不等待。
2.队列:存放任务的队列,FIFO(先进先出)原则,GCD只有2种队列。
【串行队列/Serial Dispatch Queue】:
只开启一个线程,一个任务执行完再执行下一个。(新增子线程数 1)
【并发队列/Concurrent Dispatch Queue】:
开启多个线程,且同时执行任务,只在异步dispatch_async有效。(新增子线程数N)
二、GCD的使用
1.GCD使用步骤:
1.1 创建队列。
1.2将任务追加到任务的等待队列中,系统根据任务类型执行任务。
2.队列的创建和获取方式
2.1队列创建:dispatch_queue_create(参数1,参数2);
参数1:队列唯一标识符,可为空。(推荐使用应用程序ID逆序->com.beijing.testQueue)
参数2:队列类型。(串行:DISPATCH_QUEUE_SERIAL 并发:DISPATCH_QUEUE_CONCURRENT)
例:
// 串行队列的创建方法:
dispatch_queue_t serialQueue =
dispatch_queue_create("com.beijing.testQueue", DISPATCH_QUEUE_SERIAL);
// 并发队列的创建方法:
dispatch_queue_t concurrentQueue =
dispatch_queue_create("com.beijing.testQueue", DISPATCH_QUEUE_CONCURRENT);
2.2 队列获取方法
2.2.1【主队列/Main Dispatch Queue】
dispatch_queue_t mainQueue = dispatch_get_main_queue();
2.2.2【全局并发队列/Global Dispatch Queue】
dispatch_queue_t globalQueue = dispatch_get_global_queue(参数1,参数2);
参数1:队列优先级 (一般用DISPATCH_QUEUE_PRIORITY_DEFAULT)
参数2:暂时没用,传0;
3.任务的创建方式
3.1同步执行任务创建方法
dispatch_sync(queue, ^{
// 这里放同步执行任务代码
});
3.2异步执行任务创建方法
dispatch_async(queue, ^{
// 这里放异步执行任务代码
});
网友评论