【code_小马】多线程的底层实现

我们是工程师 ——加油 !
  • 面试问你:请讲一下多线程的底层实现,还有线程之间的通信怎么实现。

IOS的多线程,一般分为三种方式:

  1. NSThread;
  2. Operations;
  3. (GCD) Grand Central Dispatch (iOS4 才开始支持)
1.面试的话,可以这样简洁的回答:

1.首先说多线程是什么,
通俗的说就是多个线程(一个线程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务);
专业的说是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。

2.Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程;

3.开发中很少用Mach的线程(记住是很少用到的),因为Mach级的线程没有提供多线程的基本特征,它的线程之间是独立的。

4.开发中实现多线程的方案

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

2.线程之间怎么通信

1. performSelector: onThread: withObject: waitUntilDone:
2.NSMachPort
//举个例子:方法一的例子有如下:
1. //子线程与主线程之间的通信
  performSelectorOnMainThread: withObject: waitUntilDone:
  或者
  dispatch_async(dispatch_get_main_queue(), ^{
        
  });

2> //子线程之间的通信
  performSelector: onThread: withObject: waitUntilDone: 

//等等

/*NSMachPort 的例子
eg.主线程传给子线程要在子线程中创建一个对象NSMachPort,这个对象是与子线程相关的,子线程创建完后把这个对象传给主线程。子线程和NSMachPort的对象通信,就实现了与主线程的通信。

*/

【code_小马】

晌午时光

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

你好,”如风淡淡的跟她打了个招呼,扭头对我说:“姐,回家吧。”    “哦,好。”我应道。    “一起吃个饭吧!旁边的那家叉烧很棒的!干吗那么着急回家!你家不是只有你们姐弟俩么?”阿珊拦住我们说。    “我们没时间。”如风冷冰冰的说。    我敷衍了阿珊几句就和如风走了,不知道为什么,我心里美滋滋的,一路上哼着歌。    “怎么这么开心?”如风问。    “没什么。”我拨开一个粽子,自己咬了一口,剩下的塞到如风嘴里。    他皱皱眉说:“豆沙太甜,我不爱吃。你快吃,别喝风啊。”    晚上回到家,我简单做了点饭,如风吃得很香。    我望着他,发现他真的是英俊的那一类,个子比前几年又高了,现在已经超过了180,可能从小就干活,手长脚长的,身形很挺拔,剑眉星目,眉宇间有种凛然不可侵犯的霸气。    如风见我看着他出神,有点不自在的说:“看什么。”    我一边擦桌子一边笑着说:“今天你见的阿珊,夸你帅呢!她还想和你交往。”    半响,他都没回话。我抬头发现他以一种极哀伤的表情看着我,和我下午在镜子中看见的自己一模一样。     “怎么了?”我不知所措的问。    “所以你今天下午安排我们会面么?”如风冷冷地说,他从未这样跟我说过话。    “她想跟你认识,所以我……怎么了?”我更加慌乱。    如风猛地站起来,挤翻了凳子,说:“你觉得有意思么?无聊透了!”    他抓起外套走了出去,我在屋里愣了半天,呆呆抓着抹布一动不动。我不知道为什么他突然变成这个样子,他从来没发过脾气的。我觉得自己被他抛下了,以前除了他工作我上学,我们都是在一起的,而现在却只有我一个人在这个孤零零的房子里。    我不知道该怎么做,只好坐着等着他,我想等他回来好好发顿脾气。但是我明白发脾气并不是我苦等他的目的,我有一种深深的恐惧,我怕他再也不回来了,那是我根本不能想象的处境。    半夜,如风回来了,身上带着股酒味。    我见到他便再也憋不住心里的委屈,扯了扯嘴角哭了起来。    如风一下子慌了手脚,他坐到我旁边说:“姐,你怎么还不睡?你别哭,你……”    我哭得更大声了,使劲捶着他的说:“你怎么能扔下我一个人!你要是不回来我怎么办!”    如风猛地抓住我的肩膀,盯着我的眼睛说:“姐,我一辈子都不会抛下你一个人的!  他认真的样子让我想起我们一起饿肚子的那个夜晚,那天如风拯救了绝望的我,而今天他又一次的让我从孤单的恐惧中走出。如风总会恰如其分的出现在我需要他的地方,每次都是。    肩膀被他攥得酸了,我轻轻挣了一下,挂着泪笑着说:“不许跟我生气了,更不许喝酒!”    如风没松开手,反而更用力,他说:“你也要答应我,不管怎么样,都不能把我抛给别人!不许扔下我一个人!”    我突然感到他目光的灼热,这种热度透过他的手传到我全身,让我有种被点燃的感觉。    “我答应你。”我恍惚的应道,其实我并不明白他的这个要求到底是意味着什么,他的态度和平时很不一样,我觉得有一些事情在我懵懵懂懂之间产生了,如风一定懂得了些什么我不懂的东西,至少目前我还不懂,或者说我还没准备好。    如风如释重负,露出了孩子般灿烂的笑容,他比我更害怕变成一个人。我们是不能分开的,少了一个另一个就根本不知道怎么活下去。

点击阅读文章第六集

点击阅读文章第八集
后续更新中,喜欢的话 请关注 【code_小马】 哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341

推荐阅读更多精彩内容

  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 1,710评论 0 17
  • 程序中同步和异步是什么意思?有什么区别? 解释一:异步调用是通过使用单独的线程执行的。原始线程启动异步调用,异步调...
    风继续吹0阅读 1,023评论 1 2
  • 1.介绍下内存的几大区域? 2.你是如何组件化解耦的? 3.runtime如何通过selector找到对应的IMP...
    小孩仔阅读 1,644评论 0 21
  • 多线程 你们项目中为什么多线程用GCD而不用NSOperation呢? 你有没有发现国外的大牛他们多线程都是用NS...
    b485c88ab697阅读 17,425评论 11 83
  • 诗歌创作在当代是一件很尴尬的事情。大量的创作者每天辛苦的劳作,然而现实对诗歌的消极态度,让很多的创作者失去了创作的...
    营州布衣阅读 233评论 1 2