計(jì)算機(jī)操作系統(tǒng)都有的基本概念,以下概念簡(jiǎn)單方式來(lái)描述。
進(jìn)程:就是在系統(tǒng)中,正在運(yùn)行的一個(gè)應(yīng)用程序。
線程:是 CPU 調(diào)度的最基本的單位,它有自己棧和寄存器。
進(jìn)程和線程的區(qū)別
進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式,進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
并發(fā):多個(gè)任務(wù)同時(shí)發(fā)生,需要被處理。比如,田徑賽場(chǎng)上的起跑線上有多個(gè)運(yùn)動(dòng)員等待起跑。
并行:在某一個(gè)時(shí)間能夠同時(shí)處理多個(gè)任務(wù)。比如,火車站開(kāi)放了多個(gè)檢票口,同一時(shí)間能夠服務(wù)多個(gè)旅客。
串行:線程執(zhí)行只能依次逐一先后有序的執(zhí)行,串行中,一個(gè)任務(wù)的執(zhí)行必須以上一個(gè)任務(wù)執(zhí)行結(jié)束為前提。
串行和并行主要區(qū)別在于一個(gè)任務(wù)的執(zhí)行是否以上一個(gè)任務(wù)的完成為前提。串行中,一個(gè)任務(wù)的執(zhí)行必須以上一個(gè)任務(wù)執(zhí)行結(jié)束為前提,并行中,一個(gè)任務(wù)的執(zhí)行與上一個(gè)任務(wù)的執(zhí)行狀態(tài)無(wú)關(guān)。以排隊(duì)買票為例,串行像單個(gè)買票隊(duì)伍,單個(gè)賣票窗口,必須一個(gè)一個(gè)來(lái),串行像單個(gè)買票隊(duì)伍,多個(gè)賣票窗口,多個(gè)人可以同時(shí)買票。
同步:就是順序往下執(zhí)行。舉例:燒完水后泡茶
異步:就是幾件事情同時(shí)在執(zhí)行。燒水的時(shí)候拿出茶具,洗茶具,然后泡茶。其中燒水和拿茶具,洗茶具是同時(shí)進(jìn)行的。
二、iOS 多線程方案
在iOS中其實(shí)目前有4套多線程方案,他們分別是:
1、pthreads
2、NSThread
3、GCD
4、NSOperation & NSOperationQueue
三、iOS 多線程原理
同一時(shí)間,CPU 只能處理一條線程,就是只有一條線程在工作,多線程之間的并發(fā)操作,其實(shí)就是 CPU 在多條線程之間快速的切換。如果 CPU 調(diào)度的線程的時(shí)間足夠快,就造成了多線程并發(fā)執(zhí)行的假象。