進(jìn)程:是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位.
線程:是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.
同步:阻塞當(dāng)前線程操作卧惜,不能開辟線程厘灼。
異步:不阻礙線程繼續(xù)操作夹纫,可以開辟線程來執(zhí)行任務(wù)。
并發(fā):當(dāng)有多個(gè)線程在操作時(shí),如果系統(tǒng)只有一個(gè)CPU,則它根本不可能真正同時(shí)進(jìn)行一個(gè)以上的線程设凹,它只能把CPU運(yùn)行時(shí)間劃分成若干個(gè)時(shí)間段,再將時(shí)間 段分配給各個(gè)線程執(zhí)行舰讹,在一個(gè)時(shí)間段的線程代碼運(yùn)行時(shí),其它線程處于掛起狀闪朱。.這種方式我們稱之為并發(fā)(Concurrent)月匣。
并行:當(dāng)系統(tǒng)有一個(gè)以上CPU時(shí),則線程的操作有可能非并發(fā)。當(dāng)一個(gè)CPU執(zhí)行一個(gè)線程時(shí)奋姿,另一個(gè)CPU可以執(zhí)行另一個(gè)線程锄开,兩個(gè)線程互不搶占CPU資源,可以同時(shí)進(jìn)行称诗,這種方式我們稱之為并行(Parallel)萍悴。
區(qū)別:并發(fā)和并行是即相似又有區(qū)別的兩個(gè)概念,并行是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生寓免;而并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生癣诱。在多道程序環(huán)境下,并發(fā)性是指在一段時(shí)間內(nèi)宏觀上有多個(gè)程序在同時(shí)運(yùn)行袜香,但在單處理機(jī)系統(tǒng)中撕予,每一時(shí)刻卻僅能有一道程序執(zhí)行,故微觀上這些程序只能是分時(shí)地交替執(zhí)行蜈首。倘若在計(jì)算機(jī)系統(tǒng)中有多個(gè)處理機(jī)实抡,則這些可以并發(fā)執(zhí)行的程序便可被分配到多個(gè)處理機(jī)上,實(shí)現(xiàn)并行執(zhí)行欢策,即利用每個(gè)處理機(jī)來處理一個(gè)可并發(fā)執(zhí)行的程序吆寨,這樣,多個(gè)程序便可以同時(shí)執(zhí)行踩寇。
GCD的一些常用的函數(shù)鸟废?(group,barrier姑荷,信號(hào)量,線程同步)
我們使用隊(duì)列組來開辟線程時(shí)缩擂,隊(duì)列組中的隊(duì)列任務(wù)是并發(fā)鼠冕,當(dāng)所有的隊(duì)列組中的所有任務(wù)完成時(shí)候,才可以調(diào)用隊(duì)列組完成任務(wù)胯盯。
barrier:表示柵欄懈费,當(dāng)在并發(fā)隊(duì)列里面使用柵欄時(shí)候,柵欄之前的并發(fā)任務(wù)開始并發(fā)執(zhí)行博脑,執(zhí)行完畢后憎乙,執(zhí)行柵欄內(nèi)的任務(wù)票罐,等柵欄任務(wù)執(zhí)行完畢后,再并發(fā)執(zhí)行柵欄后的任務(wù)泞边。
信號(hào)量:Semaphore是通過‘計(jì)數(shù)’的方式來標(biāo)識(shí)線程是否是等待或繼續(xù)執(zhí)行的该押。信號(hào)量