iOS多线程总结之GCD的使用详解

  

  

进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。
  

  

线程是指进程内的一个执行单元,也是进程内的可调度实体。
  

  

<强>与进程的区别:
  

  

(1)地址空间:线程是进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
  (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
  (3)线程是处理器调度的基本单位,但进程不是。
  (4)二者均可并发执行。

  

  

<强> 1。什么是肾小球囊性肾病?

  

全称是中央调度,可译为“伟大的中枢调度器”

  

纯C语言,提供了非常多强大的函数

  

<强> 2. gcd的优势

  

肾小球囊性肾病是苹果公司为多核的并行运算提出的解决方案

  

肾小球囊性肾病会自动利用更多的CPU内核(比如双核,四核)

  

肾小球囊性肾病会自动管理线程的生命周期(创建线程,调度任务,销毁线程)

  

程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

  

<强>队列与任务
  

  

1。队列主要包含三种:主线程队列,并行队列,串行队列
  

  

2。任务主要包含两种:异步任务和同步任务
  

  

多线程执行过程就是把任务放在队列中去执行的过程
  

  

(在计算机操作系统中对异步和同步有很深入的概念和定义,并影响到计算机系统有单线程到多线程的过渡发展,其中牵涉到线程切换,时间片等概念。但在肾小球囊性肾病这里我们只做大致使用区别)

  

队列:
  

  
      <李>并行队列:在队列中的多个任务(线程)同时执行(不按顺序执行)   <李>串行队列:在队列中的多个任务(线程)排队依次执行(按顺序执行)   
  

任务:
  

  

同步(同步)和异步(异步)的主要区别在于会不会阻塞当前线程,直到块中的任务执行完毕!
  

  

如果是同步(同步)操作,它会阻塞当前线程并等待块中的任务执行完毕,然后当前线程才会继续往下运行。
  

  

如果是异步(异步)操作,当前线程会直接往下执行,它不会阻塞当前线程。

  

3。队列的创建方法

  

可以使用dispatch_queue_create来创建对象,需要传入两个参数,第一个参数表示队列的唯一标识符,用于调试、可为空;第二个参数用来识别是串行队列还是并行队列.DISPATCH_QUEUE_SERIAL表示串行队列,DISPATCH_QUEUE_CONCURRENT表示并行队列。
  

     //串行队列的创建方法   dispatch_queue_t队列=dispatch_queue_create(“测试。队列”,DISPATCH_QUEUE_SERIAL);//并行队列的创建方法   dispatch_queue_t队列=dispatch_queue_create(“测试。队列”,DISPATCH_QUEUE_CONCURRENT);   之前      

对于并行队列,还可以使用dispatch_get_global_queue来创建全局并行队列.GCD默认提供了全局的并行队列,需要传入两个参数。第一个参数表示队列优先级,一般用DISPATCH_QUEUE_PRIORITY_DEFAULT第。二个参数暂时没的用,用0即可。
  

  

4。任务的创建方法

     //同步执行任务创建方法   dispatch_sync(队列,^ {   NSLog (@ % @》[NSThread currentThread]);//这里放任务代码   });//异步执行任务创建方法   设置(队列,^ {   NSLog (@ % @》[NSThread currentThread]);//这里放任务代码   });      

虽然使用GCD只需两步,但是既然我们有两种队列,两种任务执行方式,那么我们就有了四种不同的组合方式。这四种不同的组合方式是

  

1。并行队列+同步执行
  2.并行队列+异步执行
  3.串行队列+同步执行
  4.串行队列+异步执行
  

  

5. gcd的基本使用

  

并行队列+同步执行
  

  

不会开启新线程,执行完一个任务,再执行下一个任务
  

        - (void) syncConcurrent {   NSLog (@“syncConcurrent——开始”);   dispatch_queue_t队列=dispatch_queue_create(“测试。队列”,DISPATCH_QUEUE_CONCURRENT);   dispatch_sync(队列,^ {   for (int i=0;我& lt;2;+ + i) {   NSLog (@“1 - - - - - - % @”, [NSThread currentThread]);   }   });   dispatch_sync(队列,^ {   for (int i=0;我& lt;2;+ + i) {   NSLog (@“2 - - - - - - % @”, [NSThread currentThread]);   }   });   dispatch_sync(队列,^ {   for (int i=0;我& lt;2;+ + i) {   NSLog (@“3 - - - - - - % @”, [NSThread currentThread]);   }   });      NSLog (@“syncConcurrent——端”);   }      

iOS多线程总结之GCD的使用详解