GCD 同步异步的串行和并发问题
来源:互联网 发布:淘宝客佣金 编辑:程序博客网 时间:2024/06/05 01:54
//1.主对列:(串行队列)
dispatch_queue_t mainQueue=dispatch_get_main_queue();
NSLog(@"%@",[NSThread currentThread]);
//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(concu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列1-----%@",[NSThread currentThread]);
});
dispatch_async(concu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列2-----%@",[NSThread currentThread]);
});
dispatch_async(concu, ^{
[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]);
});
*/
dispatch_queue_t mainQueue=dispatch_get_main_queue();
NSLog(@"%@",[NSThread currentThread]);
//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(concu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列1-----%@",[NSThread currentThread]);
});
dispatch_async(concu, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"异步并行队列2-----%@",[NSThread currentThread]);
});
dispatch_async(concu, ^{
[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]);
});
*/
0 0
- GCD 同步异步的串行和并发问题
- GCD 同步 异步 串行 并发的使用方法.例子 和特点
- GCD 同步 异步 串行 并发的使用方法.例子 和特点
- GCD串行并发同步异步基本概念
- 关于GCD中串行队列、并发队列和同步执行、异步执行的探讨
- iOS 【Multithreading-GCD 同步/异步函数 和 串行/并发队列 的6种搭配使用及介绍】
- GCD--Serial(串行)和Concurrent(并发)、Synchronous(同步)和Asynchronous(异步)
- ios菜鸟关于同步、异步 并发和串行的理解
- GCD之同步函数、异步函数和串行队列、并发队列
- GCD 术语 串行 vs. 并发 同步 vs. 异步
- GCD的简单使用——同步、异步、串行、并发的具体剖析
- GCD-同步,异步分别在串行队列,并发队列,主队列下的执行方式
- GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
- GCD编程中串行、并行、同步、异步的执行顺序
- gcd中同步异步并行串行线程数目的关系
- GCD的定义及使用详解(同步异步、并发串行、线程间通信、延时执行、只执行一次代码)
- GCD简析(同步、异步、串行、并行)
- 异步串行通讯和同步串行通信两者的对比
- virtualbox安装扩展
- 【读书笔记】大话数据结构之 栈(1)
- 面试问题1
- Android笔记---LayoutInflater作用
- iOS程序崩溃,提示[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object’的解决办法
- GCD 同步异步的串行和并发问题
- 注释规范判断
- 面试技巧
- 文件/目录操作(5)——cp、scp、mv、ln命令
- hdu 1754 I Hate It
- linux su命令参数及用法详解(linux切换用户命令)
- HDOJ-5500Reorder the Books(规律)
- viewgroup自定义组件 --- 侧滑组件
- 单元测试的主要内容