1. 多線程實(shí)現(xiàn)原理;
2. 多線程實(shí)現(xiàn)的方案;
3. 線程同步技術(shù);
1. 多線程實(shí)現(xiàn)原理;
? ? ? ? - 進(jìn)程:是操作系統(tǒng)中最基本、重要的概念。是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動(dòng)態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動(dòng)規(guī)律引進(jìn)的一個(gè)概念,所有多道程序設(shè)計(jì)操作系統(tǒng)都建立在進(jìn)程的基礎(chǔ)上。
? ? ? ? ? ? ①.?狹義定義:進(jìn)程是正在運(yùn)行的程序的實(shí)例(an instance of a computer program that is being executed)。
? ? ? ? ? ? ②.?廣義定義:進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程既是基本的分配單元,也是基本的執(zhí)行單元。
? ? ? ? ? ? ③. 進(jìn)程的概念主要有兩點(diǎn):
????????????????????第一,進(jìn)程是一個(gè)實(shí)體。每一個(gè)進(jìn)程都有它自己的地址空間,一般情況下,包括文本區(qū)域(text region)、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)。文本區(qū)域存儲(chǔ)處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲(chǔ)變量和進(jìn)程執(zhí)行期間使用的動(dòng)態(tài)分配的內(nèi)存;堆棧區(qū)域存儲(chǔ)著活動(dòng)過程調(diào)用的指令和本地變量。
????????????????????第二,進(jìn)程是一個(gè)“執(zhí)行中的程序”。程序是一個(gè)沒有生命的實(shí)體,只有處理器賦予程序生命時(shí)(操作系統(tǒng)執(zhí)行之),它才能成為一個(gè)活動(dòng)的實(shí)體,我們稱其為進(jìn)程。?? ? ? ? ? ? ? ?
? ? ? ? - 線程:(英語:thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。
? ? ? ? ? ? ①.?一個(gè)進(jìn)程可以有很多線程,每條線程并行執(zhí)行不同的任務(wù);
? ? ? ? ? ? ②.?同一進(jìn)程中的多個(gè)線程有各自的調(diào)用棧(call stack),自己的寄存器環(huán)境(register context),自己的線程本地存儲(chǔ)(thread-local storage)。
? ? ? ? - 多線程:是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。
? ? ? ? ? ? ①. 實(shí)現(xiàn)原理:利用CPU在多個(gè)線程中快速調(diào)度;
? ? ? ? ? ? ②. 優(yōu)缺點(diǎn):

? ? ? ? - 并發(fā)和串行、同步和異步
? ? ? ? ? ? ①?并發(fā)和串行:主要區(qū)別在于任務(wù)執(zhí)行的方式;
? ? ? ? ? ? ? ? ? ? 并發(fā):多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行;
? ? ? ? ? ? ? ? ? ? 串行:一個(gè)任務(wù)執(zhí)行完成后,再執(zhí)行下一個(gè)任務(wù)。
? ? ? ? ? ? ② 同步和異步:主要區(qū)別在于有無新線程開辟;
? ? ? ? ? ? ? ? ? ? 同步:在當(dāng)前線程中執(zhí)行任務(wù).不具備開啟新線程的能力;
? ? ? ? ? ? ? ? ? ? 異步:在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力;
? ??????????????????同步函數(shù)(dispatch中的sync函數(shù)): 立馬在當(dāng)前線程執(zhí)行任務(wù),執(zhí)行完畢后才能繼續(xù)往下執(zhí)行,即同步函數(shù)內(nèi)的任務(wù)不執(zhí)行完,該函數(shù)就會(huì)卡住,不會(huì)繼續(xù)往下執(zhí)行;
? ??????????????????異步函數(shù)(dispatch中的async函數(shù)):不要求立馬在當(dāng)前線程執(zhí)行任務(wù),會(huì)等上一個(gè)任務(wù)執(zhí)行完再執(zhí)行。

2. 多線程實(shí)現(xiàn)的方案;

3. 線程同步技術(shù);
? ? ? ? - 概述:即當(dāng)有一個(gè)線程在對(duì)內(nèi)存進(jìn)行操作時(shí),其他線程都不可以對(duì)這個(gè)內(nèi)存地址進(jìn)行操作,直到該線程完成操作, 其他線程才能對(duì)該內(nèi)存地址進(jìn)行操作,而其他線程又處于等待狀態(tài),實(shí)現(xiàn)線程同步的方法有很多,臨界區(qū)對(duì)象就是其中一種。
? ? ? ? - IOS中的線程同步技術(shù);
(PS : 其中有部分章節(jié)是從前人的文章中搬運(yùn)過來整理而成,這些文章里已經(jīng)對(duì)部分知識(shí)點(diǎn)解釋的很清楚明了了,我也沒有更好的表達(dá)方式,所以站在巨人的肩膀上,我只是一個(gè)整理者加了部分自己的理解。)