从16年开始就接触到GCD,项目中偶尔也用到过,都是看了别人简书,照搬过来的,没有什么探究。每次看到GCD的文章都会进去看一下,却始终没搞明白,甚至连线程,队列概念都很模糊。今天早上,再次翻看GCD,终于开始有些明白。此篇用以记录下自己的初次理解。
首先区分两个概念:线程和队列。
线程:app启动,便开始一条线程,这是程序的唯一主线程。多线程是指的在主线程下可以创建多条子线程执行耗时任务,防止阻塞主线程。同步,异步是线程的概念。
队列:分为串行和并发两种。串行指程序按照写入顺序执行,并发指程序同时执行
//同步
dispatch_sync(quent, ^{
NSLog(@"步骤1");
});
//异步
dispatch_async(quent, ^{
NSLog(@"步骤1");
});
//并发
dispatch_queue_t quent = dispatch_queue_create("唯一标识", DISPATCH_QUEUE_CONCURRENT);
//串行
dispatch_queue_t quent = dispatch_queue_create("唯一标识", NULL);
队列可以同步执行也可以异步执行。是否会开启子线程只与是否创建异步执行有关。
网友评论