一、同步/异步、串行/并行的区别
1.同步/异步
同步/异步是指线程与线程之间的关系。
2.串行/并行
串行、并行是指队列内部任务与任务之间的关系。
如果是串行队列,那么队列内部的任务是按顺序执行的。
如果是并行队列,那么队列内部的任务执行时无序的,没有先后顺序。
二、线程与队列
1.线程
//同步线程
dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
//异步线程
dispatch_async(<#dispatch_queue_t queue#>,<#^(void)block#>)
2.队列
//创建一个串行队列
dispatch_queue_t queue=dispatch_queue_create("label",DISPATCH_QUEUE_SERIAL);
//创建一个并行队列
dispatch_queue_t queue=dispatch_queue_create("label",DISPATCH_QUEUE_CONCURRENT);
//获取全局队列,全局队列是并行的
dispatch_queue_t queue=dispatch_get_global_queue(0,0);
//获取主线程的队列,主线程队列是串行的
dispatch_queue_t queue=dispatch_get_main_queue();
三、几种常见的任务处理方式
1.异步串行队列
dispatch_queue_t queue=dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);
for(int I=0;i<10;i++){
dispatch_async(queue,^{
NSLog(@"----------%d",i);
});
}
队列中所有任务在异步线程中按顺序执行,结果如下:
2.异步并行队列
dispatch_queue_t queue=dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT);
for(int I=0;i<10;i++){
dispatch_async(queue,^{
NSLog(@"----------%d",i);
});
}
队列中所有任务在异步线程并行执行,无先后顺序,结果如下:
3.异步串行队列,并在任务完成后进行通知
dispatch_group_t group=dispatch_group_create();
dispatch_queue_t queue=dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);
for(int i=0;i<10;i++){
dispatch_group_async(group,queue,^{
NSLog("-----------%d",i);
});
}
dispatch_group_notify(group,queue,^{
NSLog("任务执行完毕!");
}
运行结果如下:
4.异步并行队列,并在任务完成后进行通知dispatch_group_t group=dispatch_group_create();
dispatch_queue_t queue =dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT);
for(int i=0;i<10;i++){
dispatch_group_async(group,queue,^{
NSLog("--------%d",i);
});
}
dispatch_group_notify(group,queue,^{
NSLog("任务执行完毕!");
});
结果如下:
网友评论