• 队列

  第一个参数:C语言字符串,标签

第二个参数:

DISPATCH_QUEUE_CONCURRENT:并发队列

DISPATCH_QUEUE_SERIAL:串行队列

dispatch_queue_t queue =  dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_CONCURRENT);//并发队列

dispatch_queue_t queue =  dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_SERIAL);//串行队列

  •   //获取全局并发队列(GCD默认已经提供了全局的并发队列,供整个应用使用,可以无需手动创建)  

     /*

      第一个参数:队列的优先级:

          #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 // 后台

      第二个参数:永远传0

    */

      dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

  • 使用dispatch_get_main_queue()获得主队列

      dispatch_queue_t queue = dispatch_get_main_queue();

 

并发队列

手动创建的串行队列

主队列
同步(sync)
没有开启新线程
串行执行任务
没有开启新线程
串行执行任务
没有开启新线程
串行执行任务

异步(async)

有开启新线程
并发执行任务
有开启新线程
串行执行任务
没有开启新线程
串行执行任务
  1. //同步函数+主队列:死锁
  2. -(void)syncMain
  3. {
  4. NSLog(@"----");
  5. //1.获得主队列
  6. dispatch_queue_t queue = dispatch_get_main_queue();
  7.  
  8. //2.同步函数
  9. dispatch_sync(queue, ^{
  10. NSLog(@"---download1---%@",[NSThread currentThread]);
  11. });
  12.  
  13. dispatch_sync(queue, ^{
  14. NSLog(@"---download2---%@",[NSThread currentThread]);
  15. });
  16.  
  17. dispatch_sync(queue, ^{
  18. NSLog(@"---download3---%@",[NSThread currentThread]);
  19. });
  20. dispatch_sync(queue, ^{
  21. NSLog(@"---download4---%@",[NSThread currentThread]);
  22. });
  23.  
  24. }
  25.  
  26. //异步函数+主队列:不会开线程,任务串行执行
  27. -(void)asyncMain
  28. {
  29. //1.获得主队列
  30. dispatch_queue_t queue = dispatch_get_main_queue();
  31.  
  32. //2.异步函数
  33. dispatch_async(queue, ^{
  34. NSLog(@"---download1---%@",[NSThread currentThread]);
  35. });
  36.  
  37. dispatch_async(queue, ^{
  38. NSLog(@"---download2---%@",[NSThread currentThread]);
  39. });
  40.  
  41. dispatch_async(queue, ^{
  42. NSLog(@"---download3---%@",[NSThread currentThread]);
  43. });
  44. dispatch_async(queue, ^{
  45. NSLog(@"---download4---%@",[NSThread currentThread]);
  46. });
  47.  
  48. }
  49.  
  50. //同步函数+串行队列:不会开线程,任务串行执行
  51. -(void)syncSerial
  52. {
  53.  
  54. //创建串行队列
  55. /*
  56. 第一个参数:C语言字符串,标签
  57. 第二个参数:
  58. DISPATCH_QUEUE_CONCURRENT:并发队列
  59. DISPATCH_QUEUE_SERIAL:串行队列
  60. */
  61. dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_SERIAL);
  62.  
  63. dispatch_sync(queue, ^{
  64. NSLog(@"---download1---%@",[NSThread currentThread]);
  65. });
  66.  
  67. dispatch_sync(queue, ^{
  68. NSLog(@"---download2---%@",[NSThread currentThread]);
  69. });
  70.  
  71. dispatch_sync(queue, ^{
  72. NSLog(@"---download3---%@",[NSThread currentThread]);
  73. });
  74. dispatch_sync(queue, ^{
  75. NSLog(@"---download4---%@",[NSThread currentThread]);
  76. });
  77. }
  78. //同步函数+并发队列:不会开线程,任务串行执行
  79. -(void)syncConcurrent
  80. {
  81. dispatch_queue_t queue = dispatch_get_global_queue(, );
  82.  
  83. NSLog(@"--syncConcurrent--start-");
  84.  
  85. dispatch_sync(queue, ^{
  86. NSLog(@"---download1---%@",[NSThread currentThread]);
  87. });
  88.  
  89. dispatch_sync(queue, ^{
  90. NSLog(@"---download2---%@",[NSThread currentThread]);
  91. });
  92.  
  93. dispatch_sync(queue, ^{
  94. NSLog(@"---download3---%@",[NSThread currentThread]);
  95. });
  96. dispatch_sync(queue, ^{
  97. NSLog(@"---download4---%@",[NSThread currentThread]);
  98. });
  99.  
  100. NSLog(@"--syncConcurrent--end-");
  101. }
  102. //异步函数+串行队列:会开启一条线程,任务串行执行
  103. -(void)asyncSerial
  104. {
  105. //创建串行队列
  106. /*
  107. 第一个参数:C语言字符串,标签
  108. 第二个参数:
  109. DISPATCH_QUEUE_CONCURRENT:并发队列
  110. DISPATCH_QUEUE_SERIAL:串行队列
  111. */
  112. dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_SERIAL);
  113.  
  114. dispatch_async(queue, ^{
  115. NSLog(@"---download1---%@",[NSThread currentThread]);
  116. });
  117.  
  118. dispatch_async(queue, ^{
  119. NSLog(@"---download2---%@",[NSThread currentThread]);
  120. });
  121.  
  122. dispatch_async(queue, ^{
  123. NSLog(@"---download3---%@",[NSThread currentThread]);
  124. });
  125. dispatch_async(queue, ^{
  126. NSLog(@"---download4---%@",[NSThread currentThread]);
  127. });
  128. }
  129. //异步函数+并发队列:会开启新的线程,并发执行
  130. -(void)asyncCONCURRENT
  131. {
  132. //创建并发队列
  133. /*
  134. 第一个参数:C语言字符串,标签
  135. 第二个参数:
  136. DISPATCH_QUEUE_CONCURRENT:并发队列
  137. DISPATCH_QUEUE_SERIAL:串行队列
  138. */
  139. // dispatch_queue_t queue = dispatch_queue_create("com.520it.download", DISPATCH_QUEUE_CONCURRENT);
  140. NSLog(@"--asyncCONCURRENT--start-");
  141. //获得全局并发队列
  142. /*
  143. 第一个参数:队列的优先级DISPATCH_QUEUE_PRIORITY_DEFAULT
  144. 第二个参数:永远传0
  145. */
  146. dispatch_queue_t queue = dispatch_get_global_queue(, );
  147. //异步函数
  148. /*
  149. 第一个参数:队列
  150. 第二个参数:block,在里面封装任务
  151. */
  152. dispatch_async(queue, ^{
  153. NSLog(@"---download1---%@",[NSThread currentThread]);
  154. });
  155.  
  156. dispatch_async(queue, ^{
  157. NSLog(@"---download2---%@",[NSThread currentThread]);
  158. });
  159.  
  160. dispatch_async(queue, ^{
  161. NSLog(@"---download3---%@",[NSThread currentThread]);
  162. });
  163. dispatch_async(queue, ^{
  164. NSLog(@"---download4---%@",[NSThread currentThread]);
  165. });
  166.  
  167. NSLog(@"--asyncCONCURRENT--end-");
  168. }

示例

GCD,用同步/异步函数,创建并发/串行队列的更多相关文章

  1. IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)

    进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...

  2. ios多线程操作(五)—— GCD串行队列与并发队列

          GCD的队列能够分为2大类型,分别为串行队列和并发队列      串行队列(Serial Dispatch Queue):      一次仅仅调度一个任务,队列中的任务一个接着一个地运行( ...

  3. OC 线程操作 - GCD使用 -同步函数,异步函数,串行队列,并发队列

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // GCD 开几条线程并不是我们 ...

  4. GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...

  5. 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    (1)GCD实现的同步异步.串行并行. --同步sync应用场景:用户登录,利用堵塞 --串行异步应用场景:下载等耗时间的任务 /** * 由于是异步.所以开通了子线程.可是由于是串行队列,所以仅仅须 ...

  6. iOS:对GCD中 同步、异步、并行、串行的见解

    1.GCD-同步执行多线程时          GCD中不管向什么类型的队列加同步任务,实际上都会加到当前线程中(一般为主线程). 2.GCD-异步执行多线程时          GCD中不管向什么类 ...

  7. iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

    同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...

  8. iOS:转载:同步、异步、并行、串行的详解

    理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21 ...

  9. ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)

    现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序 ...

随机推荐

  1. JAVA基础知识之JDBC——使用ResultSetMetaData分析结果集

    通过ResultSetMetaData可以对ResultSet进行分析,获取ResultSet里包含了哪些数据列,以及每个列的数据类型. ResultSet中包含了一个getMetaData()方法, ...

  2. WP8没有开发者账号升级GDR3预览版的方法

    很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...

  3. build.xml配置编译打包过程(转)

    工程目录如下,使用eclipse中的ant对此工程进行编译打包: MonServer | --------src |            |--------com |            |--- ...

  4. myeclipse maven pom.xml 配置错误

    http://www.oschina.net/question/2265006_219341#tags_nav maven pom.xml 配置文件错误       腾讯云消息队列CMQ架构解析> ...

  5. 使用mvn插件执行工程单元测试OOM的解决办法

    在执行mvn test时,maven会启动一个fork进程来运行所有的单元测试类,所以我需要设置的是这个fork进程的jvm参数. 不过最终还是让我找到了http://maven.apache.org ...

  6. SPSS数据分析——t检验

    SPSS中t检验全都集中在分析—比较均值菜单中.关于t检验再简单说一下,我们知道一个统计结果需要表达三部分内容,即集中性.变异性.显著性. 集中性的表现指标是均值变异的的表现指标是方差.标准差或标准误 ...

  7. 通过一行代码学习javascript

    [].forEach.call($$("*"), function (a){ a.style.outline = "1px solid #"+(~~(Math. ...

  8. SSH原理与运用

    SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...

  9. C#窗体 LISTVIEW

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. css3制作惊艳hover切换效果

    css3制作经验hover切换效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8" ...