一争群、 同步/異步凤类、串行/并行的區(qū)別
1.同步/異步
同步/異步是指線程與線程之間的關(guān)系.
2.串行/并行
串行/并行是指隊(duì)列內(nèi)部任務(wù)與任務(wù)之間的關(guān)系.
如果是串行隊(duì)列,那么隊(duì)列內(nèi)部的任務(wù)是按順序執(zhí)行的.
如果是并行隊(duì)列, 那么隊(duì)列內(nèi)部的任務(wù)執(zhí)行是無序的, 沒有先后順序.
二空扎、 線程與隊(duì)列
1. 線程
//同步線程
dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
//異步線程
dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
2. 隊(duì)列
//創(chuàng)建一個(gè)串行隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("label", DISPATCH_QUEUE_SERIAL);
//創(chuàng)建一個(gè)并行隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("label", DISPATCH_QUEUE_CONCURRENT);
//獲取全局隊(duì)列, 全局隊(duì)列是并行的
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//獲取主線程的隊(duì)列, 主線程隊(duì)列是串行的
dispatch_queue_t queue = dispatch_get_main_queue();
三黍匾、幾種常見的任務(wù)處理方式
1. 異步串行隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL);
for (int i = 0; i < 10; i++) {
dispatch_async(queue, ^{
NSLog(@"------- %d", i);
});
}
隊(duì)列中所有任務(wù)在異步線程中按順序執(zhí)行, 結(jié)果如下:
異步串行隊(duì)列
2. 異步并行隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 10; i++) {
dispatch_async(queue, ^{
NSLog(@"------- %d", i);
});
}
隊(duì)列中所有任務(wù)在異步線程并行執(zhí)行, 無先后順序, 結(jié)果如下:
異步并行隊(duì)列
3. 異步串行隊(duì)列, 并在任務(wù)完成后進(jìn)行通知
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(@"任務(wù)執(zhí)行完畢!");
});
運(yùn)行結(jié)果如下:
異步串行隊(duì)列, 并在任務(wù)完成后進(jìn)行通知
4. 異步并行隊(duì)列, 并在任務(wù)完成后進(jìn)行通知
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(@"任務(wù)執(zhí)行完畢!");
});
結(jié)果如下:
異步并行隊(duì)列, 并在任務(wù)完成后進(jìn)行通知