GCD网络多线程---同步执行,异步执行,串行队列,并行队列

总结:同步(不管是串行还是并行)----不开辟子线程

异步(不管是串行还是并行)----开辟子线程

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 中调用一下,看看效果如何~

时间: 2024-08-02 23:01:35

GCD网络多线程---同步执行,异步执行,串行队列,并行队列的相关文章

【iOS面试系列-2】多线程中同步、异步和串行、并行之间的逻辑关系(必考,必须掌握)

一.同步.异步和串行.并行 任务串行执行就是每次只有一个任务被执行,任务并发执行就是在同一时间可以有多个任务被执行. 一个同步函数只在完成了它预定的任务后才返回.一个异步函数,刚好相反,会立即返回,预定的任务会完成但不会等它完成.因此,一个异步函数不会阻塞当前线程去执行下一个函数. (来源:http://www.cocoachina.com/industry/20140428/8248.html) 队列分为串行和并行 任务的执行分为同步和异步 -------  队列只是负责任务的调度,而不负责任

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

现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序它是按顺序从上往下执行的, 这个执行顺序我们可以把它看成是一条线,把这条线就叫做线程(个人理解,错了勿喷);每一个程序中至少包含一条线程, 这条线程,我们叫它主线程. 多线程:多线程也就是说一个程序中有多条执行路径.在iOS当中将一些比较耗时的操作放到另一条执行路径里.让它与主线程同时运行.这样不会

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

同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一个操作,在串行队列中,可以把最后需要执行的block放在队列最后即可,但是在并行队列中,可以用dispatch_group,最后通过dispatch_group_notify来执行最后要执行的block. 待编辑,补充例子.

iOS-线程之GCD方式---之同步异步和串行队列并行队列之间的关系

GCD方式是Apple官方推荐实现多线程的方式 但在这之前必须理清楚同步,异步,串行队列,并行队列之间的概念. 同步:即当前的执行程序块不会创建一个新的线程,只能在当前线程中执行. 异步:会在当前的线程之外创建一个新的线程,并在新的线程中执行代码块. 首先声明一点,队列是用来存放即将执行的线程体的. 串行队列:串行队列中的线程满足FIFO(First In First Out),并且只有在先出的线程执行完,后续的线程才能出队列执行.(很可能造成APP的假死状态) 并行队列:并行队列也满足FIFO

Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)

系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe AIR中使用Flex连接Sqlite数据库(3)(查询) Adobe AIR中使用Flex连接Sqlite数据库(4)(事务) Flex,Fms3相关文章索引 Fms3和Flex打造在线多人视频会议和视频聊天(附原代码) 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))

异步任务+并行队列情况与异步任务+串行队列(主队列)情况

异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { //全局并行队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //异步执行 dispatch_async(queue, ^{ for (int i = 0; i<2;

关于异步任务串行执行的思考与实现

最近在做的一个需求被产品的各种奇葩要求和各种为了体验的迷之借口搞得面目前非,里面有很多异步请求,而且有时候是独立执行,有时候需要相互依赖的串行执行(A的结果回来了,成功的话执行B,不成功不管).一开始我都是非常简单的在Activity中实现各种回调接口,然后在回调方法中调用下一个异步请求,为了能串行的执行,因此加了很多boolean值标记当前什么状态.然后我就想做一个可以封装异步任务,然后按照顺序异步执行的一个模式. 我希望使用的时候,可以new一个AsyncTask对象,然后它成功的后执行什么

ajax同步、异步执行简单理解与证明

此理解范例代码来自前几篇随笔! 重在实际操作练习一下!!!!! 在$.ajax()中我们可以常常看到async,这就是来指定ajax同步异步的,需要记忆一下: 记忆方法: sync英语中的意思是:“同步”.“同步的”.“同步处理” 前面加个“a”,构成async英文中的意思是:“异步” 再者给他指定true和false那就容易理解了: “async:true” 意思是:“异步” “async:false” 意思是:“同步” 分析async作用: 当“async:true”时,也就是异步执行aja

(转) Java多线程同步与异步

Java线程 同步与异步 线程池1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲 系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制 同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求 不到,怎么办,A线程只能等待下去