http://itjoy.org/?p=545
笔记(一)中介绍了queue分为两种,一种的Serial Dispatch Queue 每次执行一个任务,按顺序,另一个是Concurrent Dispatch Queue,任务并行执行,顺序不定。那么如何创建这两种Queue呢?可以通过dispatch_queue_create 函数来创建这两种queue。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/
第一个参数为queue的名称,命名规则为FQDN,应用名称ID的倒序+queue名字
第二个参数为Null 创建Serial dispatch queue; 如果为DISPATCH_QUEUE_CONCURRENT 则创建的是Concurrent queue;
dispatch_queue_t
mySerialQueue
=
dispatch_queue_create
(
"org.itjoy.gcd.mySerialQueue"
,
NULL
)
;
dispatch_async
(
mySerialQueue
,
^
{
NSLog
(
@"hello GCD"
)
;
}
)
;
dispatch_release
(
mySerialQueue
)
;
释放 对应的是retain
/*
*/
dispatch_queue_t
myConcurrentQueue
=
dispatch_queue_create
(
"org.itjoy.gcd.myConcurrentQueue"
,
DISPATCH_QUEUE_CONCURRENT
)
;
dispatch_async
(
myConcurrentQueue
,
^
{
NSLog
(
@"heloo jin"
)
;
}
)
;
dispatch_release
(
myConcurrentQueue
)
;
///释放 对应的是retain
/
|
注意事项:
使用dispatch_queue_create创建Serial Dispatch Queue,该queue虽然每次只执行一个任务,但是通过dispatch_queue_create 可以创建多个Serial Dispatch Queue,将处理追加到多个queue中,每次就同时执行多个任务,系统对于一个Serial Dispatch Queue就生成一个线程,如果这样的线程过多,对资源耗费是相当大的,反而降低了系统的性能,因此需要注意创建的数量。
对于共享数据的操作,应该使用Serial Dispatch Queue,这样不会造成数据竞争,生成脏数据。生成的Serial Dispatch Queue个数仅当所必需的数量。例如数据库创建表需要一个,文件写入需要一个,切忌不能大量创建。
当数据不发生数据竞争的时候可以使用Concurrent Dispatch Queue,对于该queue,不管生成多少线程,都受系统限制,系统会回收不用的线程,相对于Serial Dispatch Queue 问题要少。