多線程技術(shù)
多線程(multithreading)
是指軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)谓娃。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程实柠,進(jìn)而提升整體處理性能。
原理
同一時(shí)間,CPU只能處理一條線程,只有一條線程在工作。
多線程并發(fā)執(zhí)行酝豪,其實(shí)是CPU快速地在多線程之間調(diào)度(切換)。
如果CPU調(diào)度線程的時(shí)間足夠快精堕,就造成了多線程并發(fā)執(zhí)行的假象(CPU并不是真正的同時(shí)執(zhí)行多個(gè)任務(wù))孵淘。
多線程技術(shù)方案對(duì)比
多線程技術(shù)方案 | 簡(jiǎn)介 | 語(yǔ)言 | 線程生命周期 | 使用頻率 |
---|---|---|---|---|
pthread | 一套通用的多線程API;適用于Unix/Linux/Windows等系統(tǒng)歹篓;跨平臺(tái)瘫证,可移植;使用難度大 | C | 程序員管理 | 幾乎不用 |
NSThread | 使用更加面向?qū)ο笞椋缓?jiǎn)單易用背捌,可直接操作線程對(duì)象 | OC | 程序員管理 | 偶爾使用 |
GCD | 旨在替代NSThread等線程技術(shù);充分利用設(shè)備的多核 | C | 自動(dòng)管理 | 經(jīng)常使用 |
NSOperation | 基于GCD(底層是GCD)洞斯;比GCD多了一些簡(jiǎn)單實(shí)用的功能毡庆;使用更加面向?qū)ο?/td> | OC | 自動(dòng)管理 | 經(jīng)常使用 |
多線程技術(shù)方案實(shí)現(xiàn)
1. NSThread
(1)使用NSThread對(duì)象建立一個(gè)線程非常方便;
(2)使用NSThread管理多個(gè)線程非常困難烙如,不推薦使用么抗;
(3)使用[NSThread currentThread]獲得任務(wù)所在線程,適用于這三種技術(shù)亚铁。
2. GCD(Grand Central Dispatch)
(1)是基于C語(yǔ)言的底層API蝇刀,可用于多核并行計(jì)算;
(2)用Block定義任務(wù)徘溢,使用起來(lái)非常靈活吞琐,GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)然爆、銷毀線程)顽分;
(3)提供了更多的控制能力以及操作隊(duì)列中所不能使用的底層函數(shù)。
任務(wù)與隊(duì)列
- 任務(wù)
即需要執(zhí)行的操作施蜜,在GCD中任務(wù)是放在block里。執(zhí)行的方式有兩種:同步(sync)與異步(async)雌隅,兩者的主要區(qū)別在于是否具備開啟新線程的能力翻默。
- 同步(sync)
同步添加任務(wù)到指定的隊(duì)列中缸沃,在隊(duì)列中的正在執(zhí)行的任務(wù)執(zhí)行結(jié)束之前,會(huì)一直等待修械,直到該任務(wù)在所在隊(duì)列中優(yōu)先級(jí)高于本身的任務(wù)執(zhí)行完畢之后才能開始執(zhí)行趾牧。
不具備開啟新線程的能力。
- 異步(async)
異步添加任務(wù)到指定的隊(duì)列中肯污,無(wú)需等待即可直接執(zhí)行翘单。
具備開啟新線程的能力。
- 隊(duì)列
即執(zhí)行任務(wù)的等待隊(duì)列蹦渣,用來(lái)存放任務(wù)的隊(duì)列哄芜。隊(duì)列是一種特殊的線性表,采用FIFO(先進(jìn)先出)的原則柬唯。
在GCD中隊(duì)列分為串行隊(duì)列(Serial Dispatch Queue)和并行隊(duì)列(Concurrent Dispatch Queue)兩種认臊,兩者的主要區(qū)別是:執(zhí)行的順序不同,開啟線程數(shù)不同锄奢。
- 串行隊(duì)列
每次只有一個(gè)任務(wù)被執(zhí)行失晴,讓任務(wù)一個(gè)接著一個(gè)執(zhí)行。(只開啟一個(gè)子線程)
- 并行隊(duì)列
可以讓多個(gè)任務(wù)并發(fā)執(zhí)行拘央。(可以開啟多個(gè)線程涂屁,并且同時(shí)執(zhí)行任務(wù))
注意:并發(fā)隊(duì)列的并發(fā)功能只有在異步下才有效
3. NSOperation
(1)是使用GCD實(shí)現(xiàn)的一套Objective-C的API;
(2)是面向?qū)ο蟮木€程技術(shù)灰伟;
(3)提供了一些GCD中不容易實(shí)現(xiàn)的特性拆又,如:現(xiàn)在最大并發(fā)數(shù)量、操作之間的依賴關(guān)系袱箱。