整個(gè)《面試題》都是對(duì)[2017年6月iOS招人心得(附面試題)]的整理
1.進(jìn)程和線程的區(qū)別
??線程和進(jìn)程的區(qū)別主要在于它們是不同的操作系統(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)程。
??線程是CPU獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位(可以理解為一個(gè)進(jìn)程中執(zhí)行的代碼片段)滚澜。
??進(jìn)程是資源分配的基本單位(進(jìn)程是一塊包含了某些資源的內(nèi)存區(qū)域)粗仓。
??進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性博秫。進(jìn)程是線程的容器潦牛,真正完成代碼執(zhí)行的線程,而進(jìn)程則作為線程的執(zhí)行環(huán)境挡育。一個(gè)程序至少包含一個(gè)進(jìn)程巴碗,一個(gè)進(jìn)程至少包含一個(gè)線程,一個(gè)進(jìn)程中的所有線程共享當(dāng)前進(jìn)程所擁有的資源即寒。
2.同步異步的區(qū)別
??異步和同步是相對(duì)的橡淆,同步就是順序執(zhí)行,執(zhí)行完一個(gè)再執(zhí)行下一個(gè)母赵,需要等待逸爵、協(xié)調(diào)運(yùn)行。異步就是彼此獨(dú)立,在等待某事件的過(guò)程中繼續(xù)做自己的事凹嘲,不需要等待這一事件完成后再工作师倔。線程就是實(shí)現(xiàn)異步的一個(gè)方式。異步是讓調(diào)用方法的主線程不需要同步等待另一線程的完成周蹭,從而可以讓主線程干其它的事情趋艘。
??異步和多線程并不是一個(gè)同等關(guān)系,異步是最終目的,多線程只是我們實(shí)現(xiàn)異步的一種手段疲恢。異步是當(dāng)一個(gè)調(diào)用請(qǐng)求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回而可以做其它的事情。實(shí)現(xiàn)異步可以采用多線程技術(shù)或則交給另外的進(jìn)程來(lái)處理瓷胧。
3.并行和并發(fā)的區(qū)別
??并發(fā)行和并行性的區(qū)別可以用饅頭做比喻显拳。前者相當(dāng)于一個(gè)人同時(shí)吃三個(gè)饅頭和三個(gè)人同時(shí)吃一個(gè)饅頭。
??并發(fā)性(Concurrence):指兩個(gè)或兩個(gè)以上的事件或活動(dòng)在同一時(shí)間間隔內(nèi)發(fā)生搓萧。并發(fā)的實(shí)質(zhì)是一個(gè)物理CPU(也可以多個(gè)物理CPU) 在若干道程序之間多路復(fù)用杂数,并發(fā)性是對(duì)有限物理資源強(qiáng)制行使多用戶共享以提高效率。
??并行性(parallelism)指兩個(gè)或兩個(gè)以上事件或活動(dòng)在同一時(shí)刻發(fā)生瘸洛。在多道程序環(huán)境下揍移,并行性使多個(gè)程序同一時(shí)刻可在不同CPU上同時(shí)執(zhí)行。
??區(qū)別:一個(gè)處理器同時(shí)處理多個(gè)任務(wù)和多個(gè)處理器或者是多核的處理器同時(shí)處理多個(gè)不同的任務(wù)货矮。
??前者是邏輯上的同時(shí)發(fā)生(simultaneous)羊精,而后者是物理上的同時(shí)發(fā)生。
??兩者的聯(lián)系:并行的事件或活動(dòng)一定是并發(fā)的囚玫,但反之并發(fā)的事件或活動(dòng)未必是并行的喧锦。并行性是并發(fā)性的特例,而并發(fā)性是并行性的擴(kuò)展抓督。