博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GCD网络多线程---同步运行,异步运行,串行队列,并行队列
阅读量:5038 次
发布时间:2019-06-12

本文共 2285 字,大约阅读时间需要 7 分钟。

    总结:同步(无论是串行还是并行)----不又一次开辟子线程

        异步(无论是串行还是并行)----开辟子线程

    

    

    GCD:

        dispatch queue

       主线程的main queue

       并行队列 global dispatch queue

       串行队列serial queues 一般用于按顺序同步訪问

#pragma mark - 载入多线程

- (void) _loadMutil

{

    

    //GCD基于C语言

    //1.主对列:(串行队列)

    dispatch_queue_t mainQueue=dispatch_get_main_queue();

    

    

    //2.全局并行队列

    dispatch_queue_t concu=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    

    

    //3.创建串行队列

   dispatch_queue_t queueSerial=dispatch_queue_create("jrqueue1",DISPATCH_QUEUE_SERIAL);

    

    

    //4.创建并行队列

    dispatch_queue_t queueConcu=dispatch_queue_create("jrqueue2",DISPATCH_QUEUE_CONCURRENT);

    

    

    //同步运行+串行队列

   /*

     dispatch_sync(queueSerial, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"同步串行队列1-----%@",[NSThread currentThread]);

     });

     

     dispatch_sync(queueSerial, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"同步串行队列2-----%@",[NSThread currentThread]);

     });

     */

    

    //同步运行+并行队列

   /*

     dispatch_sync(queueConcu, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"同步并行队列1-----%@",[NSThread currentThread]);

     });

     

     dispatch_sync(queueConcu, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"同步并行队列2-----%@",[NSThread currentThread]);

     });

     */

    

    //异步运行+串行队列-----开启一个子线程,且顺序运行

   /*

     dispatch_async(queueSerial, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"异步串行队列1-----%@",[NSThread currentThread]);

     });

     

     dispatch_async(queueSerial, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"异步串行队列2-----%@",[NSThread currentThread]);

     });

     

     dispatch_async(queueSerial, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"异步串行队列3-----%@",[NSThread currentThread]);

     });

     */

    

    //异步运行+并行队列----开启多个线程,且并发运行(无序)

   /*

     dispatch_async(queueConcu, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"异步并行队列1-----%@",[NSThread currentThread]);

     });

     

     dispatch_async(queueConcu, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"异步并行队列2-----%@",[NSThread currentThread]);

     });

     

     dispatch_async(queueConcu, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"异步并行队列3-----%@",[NSThread currentThread]);

     });

     */

    

    //主对列+同步运行-----死锁(将下面两个加入到主队列,等待前面的运行完毕(loadView

loadData之类的),可是当运行到这一步时,形成死循环)

   /*

     dispatch_sync(mainQueue, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"同步主队列1-----%@",[NSThread currentThread]);

     });

     

     dispatch_sync(mainQueue, ^{

     [NSThread sleepForTimeInterval:2];

     NSLog(@"同步主队列2-----%@",[NSThread currentThread]);

     });

     */

}

@end

将以上的方法,在viewDidLoad 中调用一下。看看效果怎样~

转载于:https://www.cnblogs.com/llguanli/p/7356907.html

你可能感兴趣的文章
html5实现移动端下拉刷新(原理和代码)
查看>>
iPhone开发中从一个视图跳到另一个视图有三种方法:
查看>>
pytho logging
查看>>
一个Java程序员应该掌握的10项技能
查看>>
c#英文大小写快捷键
查看>>
tpframe免费开源框架又一重大更新
查看>>
一.go语言 struct json相互转换
查看>>
什么是架构设计
查看>>
程序员学习能力提升三要素
查看>>
PHP 微信错误状态返回码说明
查看>>
【4.1】Python中的序列分类
查看>>
ubuntu 移动文件
查看>>
Easy Mock
查看>>
看看 Delphi XE2 为 VCL 提供的 14 种样式
查看>>
Python内置函数(29)——help
查看>>
机器学习系列-tensorflow-01-急切执行API
查看>>
SqlServer 遍历修改字段长度
查看>>
Eclipse快捷键:同时显示两个一模一样的代码窗口
查看>>
《架构之美》阅读笔记05
查看>>
《大道至简》读后感——论沟通的重要性
查看>>