#pragma mark -
并行队列
- (
void
)gcdDemo2
{
// 1.
并行队列
dispatch_queue_t
q =
dispatch_queue_create
(
"myQueue"
,
DISPATCH_QUEUE_CONCURRENT
);
//
非
ARC
中,需要自己释放队列
// dispatch_release(q);
// 3.
同步任务,不会开启新的线程
//
在实际开发中,同步任务可以保证执行完成之后,才让后续的异步任务开始执行,用于控制任务之间的先后顺序
//
在后台线程中,处理
“
用户登录
”
for
(
int
i =
0
; i <
10
; i++) {
dispatch_sync
(q, ^{
NSLog
(
@"%@ - %d"
, [
NSThread
currentThread
], i);
});
}
// 2.
异步任务,会在多条线程上工作,具体开多少条线程,由系统决定
//
仍然是按照任务添加到队列中的顺序被调度,只是执行先后可能会有差异!
// ***
能够将耗时的操作,放到子线程中工作
// ***
与串行队列异步任务相比,并发性能更好!但是执行的先后顺序,不固定
for
(
int
i =
0
; i <
10
; i++) {
dispatch_async
(q, ^{
NSLog
(
@"%@ - %d"
, [
NSThread
currentThread
], i);
});
}
}
并行队列中的任务是多个任务同时执行的
但是如果异步任务前面有同步任务 就会先执行同步任务同步任务是按顺序执行的任务等他执行完了才会执行并行中的异步任务 (可以做到阻塞 控制任务的执行顺序)
如果异步任务后面有同步任务 两个任务会并行(同时)执行
//
串行队列
- (
void
)gcdDemo
{
// dispatch_queue_t q = dispatch_queue_create("zhang", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t
q =
dispatch_queue_create
(
"wan"
,
NULL
);
// #define DISPATCH_QUEUE_SERIAL NULL
// DISPATCH_QUEUE_SERIAL == NULL;
NSLog
(
@"%@"
, [
NSThread
currentThread
]);
// 2.
异步任务
async
,能够开线程
//
串行队列中,异步任务最多只能开一条线程,所有任务顺序执行!
//
串行队列,异步任务,在多线程中,是斯坦福大学最推荐的一种多线程方式!
//
优点:将任务放在其他线程中工作,每个任务顺序执行,便于调试
//
缺点:并发能力不强,最多只能使用一条线程!
for
(
int
i =
0
; i <
10
; i++)
{
dispatch_async
(q, ^{
NSLog
(
@"%@-- %d"
, [
NSThread
currentThread
], i);
});
}
// 2.
同步任务
sync(
没用处
)还是在主线程中执行
for
(
int
i =
0
; i <
10
; i++) {
dispatch_sync
(q, ^{
NSLog
(
@"%@---%d"
, [
NSThread
currentThread
], i);
});
}
串行队列中的任务都是按顺序执行 谁在前就先执行谁 主线程和子线程平等 一样谁在前选执行谁 执行完一个才会执行下一个任务