【code_小馬】多線程的底層實(shí)現(xiàn)

我們是工程師 ——加油 !
  • 面試問你:請講一下多線程的底層實(shí)現(xiàn),還有線程之間的通信怎么實(shí)現(xiàn)。

IOS的多線程,一般分為三種方式:

  1. NSThread;
  2. Operations;
  3. (GCD) Grand Central Dispatch (iOS4 才開始支持)
1.面試的話,可以這樣簡潔的回答:

1.首先說多線程是什么,
通俗的說就是多個(gè)線程(一個(gè)線程中可以開啟多條線程,每條線程可以并行(同時(shí))執(zhí)行不同的任務(wù));
專業(yè)的說是一個(gè)比較輕量級的方法來實(shí)現(xiàn)單個(gè)應(yīng)用程序內(nèi)多個(gè)代碼執(zhí)行路徑。

2.Mach是第一個(gè)以多線程方式處理任務(wù)的系統(tǒng),因此多線程的底層實(shí)現(xiàn)機(jī)制是基于Mach的線程;

3.開發(fā)中很少用Mach的線程(記住是很少用到的),因?yàn)镸ach級的線程沒有提供多線程的基本特征,它的線程之間是獨(dú)立的。

4.開發(fā)中實(shí)現(xiàn)多線程的方案

  • C語言的POSIX接口:#include <pthread.h>;
  • OC的NSThread;
  • C語言的GCD接口 (性能最好,代碼更精簡);
  • OC的NSOperation 和 NSOperation Queen 是基于GCD的;

2.線程之間怎么通信

1. performSelector: onThread: withObject: waitUntilDone:
2.NSMachPort
//舉個(gè)例子:方法一的例子有如下:
1. //子線程與主線程之間的通信
  performSelectorOnMainThread: withObject: waitUntilDone:
  或者
  dispatch_async(dispatch_get_main_queue(), ^{
        
  });

2> //子線程之間的通信
  performSelector: onThread: withObject: waitUntilDone: 

//等等

/*NSMachPort 的例子
eg.主線程傳給子線程要在子線程中創(chuàng)建一個(gè)對象NSMachPort,這個(gè)對象是與子線程相關(guān)的,子線程創(chuàng)建完后把這個(gè)對象傳給主線程。子線程和NSMachPort的對象通信,就實(shí)現(xiàn)了與主線程的通信。

*/

【code_小馬】

晌午時(shí)光

很喜歡的一篇文章,拿出來和大家分享
【第七集】

你好,”如風(fēng)淡淡的跟她打了個(gè)招呼,扭頭對我說:“姐,回家吧?!薄    芭叮??!蔽覒?yīng)道?!    耙黄鸪詡€(gè)飯吧!旁邊的那家叉燒很棒的!干嗎那么著急回家!你家不是只有你們姐弟倆么?”阿珊攔住我們說?!    拔覀儧]時(shí)間?!比顼L(fēng)冷冰冰的說。    我敷衍了阿珊幾句就和如風(fēng)走了,不知道為什么,我心里美滋滋的,一路上哼著歌?!    霸趺催@么開心?”如風(fēng)問?!    皼]什么?!蔽覔荛_一個(gè)粽子,自己咬了一口,剩下的塞到如風(fēng)嘴里?!   ∷櫚櫭颊f:“豆沙太甜,我不愛吃。你快吃,別喝風(fēng)啊?!薄   ⊥砩匣氐郊?,我簡單做了點(diǎn)飯,如風(fēng)吃得很香?!   ∥彝?,發(fā)現(xiàn)他真的是英俊的那一類,個(gè)子比前幾年又高了,現(xiàn)在已經(jīng)超過了180,可能從小就干活,手長腳長的,身形很挺拔,劍眉星目,眉宇間有種凜然不可侵犯的霸氣?!   ∪顼L(fēng)見我看著他出神,有點(diǎn)不自在的說:“看什么?!薄   ∥乙贿叢磷雷右贿呅χf:“今天你見的阿珊,夸你帥呢!她還想和你交往。”    半響,他都沒回話。我抬頭發(fā)現(xiàn)他以一種極哀傷的表情看著我,和我下午在鏡子中看見的自己一模一樣。     “怎么了?”我不知所措的問?!    八阅憬裉煜挛绨才盼覀儠婷??”如風(fēng)冷冷地說,他從未這樣跟我說過話?!    八敫阏J(rèn)識,所以我……怎么了?”我更加慌亂?!   ∪顼L(fēng)猛地站起來,擠翻了凳子,說:“你覺得有意思么?無聊透了!”    他抓起外套走了出去,我在屋里愣了半天,呆呆抓著抹布一動不動。我不知道為什么他突然變成這個(gè)樣子,他從來沒發(fā)過脾氣的。我覺得自己被他拋下了,以前除了他工作我上學(xué),我們都是在一起的,而現(xiàn)在卻只有我一個(gè)人在這個(gè)孤零零的房子里?!   ∥也恢涝撛趺醋?,只好坐著等著他,我想等他回來好好發(fā)頓脾氣。但是我明白發(fā)脾氣并不是我苦等他的目的,我有一種深深的恐懼,我怕他再也不回來了,那是我根本不能想象的處境?!   “胍?,如風(fēng)回來了,身上帶著股酒味?!   ∥乙姷剿阍僖脖锊蛔⌒睦锏奈?,扯了扯嘴角哭了起來?!   ∪顼L(fēng)一下子慌了手腳,他坐到我旁邊說:“姐,你怎么還不睡?你別哭,你……”    我哭得更大聲了,使勁捶著他的說:“你怎么能扔下我一個(gè)人!你要是不回來我怎么辦!”    如風(fēng)猛地抓住我的肩膀,盯著我的眼睛說:“姐,我一輩子都不會拋下你一個(gè)人的!  他認(rèn)真的樣子讓我想起我們一起餓肚子的那個(gè)夜晚,那天如風(fēng)拯救了絕望的我,而今天他又一次的讓我從孤單的恐懼中走出。如風(fēng)總會恰如其分的出現(xiàn)在我需要他的地方,每次都是?!   〖绨虮凰盟崃?,我輕輕掙了一下,掛著淚笑著說:“不許跟我生氣了,更不許喝酒!”    如風(fēng)沒松開手,反而更用力,他說:“你也要答應(yīng)我,不管怎么樣,都不能把我拋給別人!不許扔下我一個(gè)人!”    我突然感到他目光的灼熱,這種熱度透過他的手傳到我全身,讓我有種被點(diǎn)燃的感覺?!    拔掖饝?yīng)你。”我恍惚的應(yīng)道,其實(shí)我并不明白他的這個(gè)要求到底是意味著什么,他的態(tài)度和平時(shí)很不一樣,我覺得有一些事情在我懵懵懂懂之間產(chǎn)生了,如風(fēng)一定懂得了些什么我不懂的東西,至少目前我還不懂,或者說我還沒準(zhǔn)備好。    如風(fēng)如釋重負(fù),露出了孩子般燦爛的笑容,他比我更害怕變成一個(gè)人。我們是不能分開的,少了一個(gè)另一個(gè)就根本不知道怎么活下去。

點(diǎn)擊閱讀文章第六集

點(diǎn)擊閱讀文章第八集
后續(xù)更新中,喜歡的話 請關(guān)注 【code_小馬】 哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼、方法又是什么? 1...
    AlanGe閱讀 1,913評論 0 17
  • 程序中同步和異步是什么意思?有什么區(qū)別? 解釋一:異步調(diào)用是通過使用單獨(dú)的線程執(zhí)行的。原始線程啟動異步調(diào)用,異步調(diào)...
    風(fēng)繼續(xù)吹0閱讀 1,109評論 1 2
  • 1.介紹下內(nèi)存的幾大區(qū)域? 2.你是如何組件化解耦的? 3.runtime如何通過selector找到對應(yīng)的IMP...
    小孩仔閱讀 1,819評論 0 21
  • 多線程 你們項(xiàng)目中為什么多線程用GCD而不用NSOperation呢? 你有沒有發(fā)現(xiàn)國外的大牛他們多線程都是用NS...
    b485c88ab697閱讀 18,926評論 11 83
  • 詩歌創(chuàng)作在當(dāng)代是一件很尷尬的事情。大量的創(chuàng)作者每天辛苦的勞作,然而現(xiàn)實(shí)對詩歌的消極態(tài)度,讓很多的創(chuàng)作者失去了創(chuàng)作的...
    營州布衣閱讀 314評論 1 2

友情鏈接更多精彩內(nèi)容