1 線程: 線程是進(jìn)程中一個(gè)獨(dú)立的執(zhí)行路徑(控制單元);一個(gè)進(jìn)程中至少包含一個(gè)線程字支,即主線程
2 隊(duì)列 :dispatch_queue_t诚镰,一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),線程的創(chuàng)建和回收不需要程序員操作祥款,由隊(duì)列負(fù)責(zé)。
3 串行隊(duì)列:隊(duì)列中的任務(wù)只會(huì)順序執(zhí)行 dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);
4 并行隊(duì)列:隊(duì)列中的任務(wù)通常會(huì)并發(fā)執(zhí)行
dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);
5 全局隊(duì)列:是系統(tǒng)開(kāi)發(fā)的月杉,直接拿過(guò)來(lái)(get)用就可以刃跛;與并行隊(duì)列類似,但調(diào)試時(shí)苛萎,無(wú)法確認(rèn)操作所在隊(duì)列桨昙。
dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);
6 主隊(duì)列:每一個(gè)應(yīng)用程序?qū)?yīng)唯一一個(gè)主隊(duì)列,直接get即可腌歉;在多線程開(kāi)發(fā)中蛙酪,使用主隊(duì)列更新UI
dispatch_queue_t q = dispatch_get_main_queue();
7 dispatch_async 異步操作,并發(fā)執(zhí)行翘盖,無(wú)法確定任務(wù)的執(zhí)行順序桂塞;dispatch_sync 同步操作,會(huì)依次順序執(zhí)行馍驯,能夠確定任務(wù)的執(zhí)行順序阁危。
8 串行隊(duì)列同步:操作不會(huì)新建線程玛痊,操作順序執(zhí)行;
串行隊(duì)列異步:操作需要?jiǎng)?chuàng)建一個(gè)子線程狂打,會(huì)創(chuàng)建子線程擂煞,線程的創(chuàng)建和回收不用程序員參與,操作順序執(zhí)行趴乡。
并行隊(duì)列同步:操作不會(huì)新建線程对省,操作順序執(zhí)行
并行隊(duì)列異步:操作會(huì)創(chuàng)建多個(gè)線程(有多少任務(wù),就開(kāi)n個(gè)線程執(zhí)行),操作無(wú)序執(zhí)行晾捏,隊(duì)列前如果有其他任務(wù)蒿涎,等待前面的任務(wù)執(zhí)行完成后再去執(zhí)行。
全局隊(duì)列異步:操作會(huì)新建多個(gè)線程粟瞬,操作無(wú)序執(zhí)行同仆,隊(duì)列前如果有其他任務(wù),會(huì)等待前面的任務(wù)執(zhí)行完成后再執(zhí)行
全局隊(duì)列同步:操作不會(huì)新建線程裙品,操作順序執(zhí)行俗批。
主隊(duì)列異步:操作都應(yīng)該在主線程上順序執(zhí)行的,不存在異步市怎。
主隊(duì)列同步:如果把主線程中的操作看成一個(gè)大的block岁忘,那么除非主線程被用戶殺掉,否則永遠(yuǎn)不會(huì)結(jié)束区匠。主隊(duì)列中添加的同步操作永遠(yuǎn)不會(huì)執(zhí)行干像,會(huì)死鎖。
9 隊(duì)列和線程的區(qū)別:
隊(duì)列是管理線程的驰弄,相當(dāng)于線程池麻汰,能管理線程什么時(shí)候執(zhí)行。
隊(duì)列分為串行隊(duì)列和并行隊(duì)列
串行隊(duì)列:隊(duì)列中的線程按順序執(zhí)行 不會(huì)同時(shí)執(zhí)行
并行隊(duì)列:隊(duì)列中的線程會(huì)并發(fā)執(zhí)行戚篙。