美文网首页iOS基础·OC高级篇iOS Developer
【code_小马】多线程的底层实现

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

作者: 曾经像素有点低 | 来源:发表于2017-02-14 22:49 被阅读9352次
    我们是工程师 ——加油 !
    • 面试问你:请讲一下多线程的底层实现,还有线程之间的通信怎么实现。

    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_小马】 哦

    相关文章

      网友评论

      • 30882bdaefb5:加油哦,我们不仅要你的技术贴,还要你的故事书哦:smile::smile:
      • 04ae9e1e757e:哦哦,这个也得留着,最近想换个公司了:stuck_out_tongue_winking_eye:
      • ITiOS开发者:我凑,这个必须赞,讲得好易懂,我瞬间记住了居然:stuck_out_tongue_winking_eye::smile:
      • 1e942a129019:文章末尾的小说快快更新啊,完全不够看的呢,别跟《海贼王》学啊,更新的太慢了,我都憋死了:sob::sob::sob:
        04ae9e1e757e:@ITiOS开发者 +1
        ITiOS开发者:@铛铛铛的登场 就是啊,楼主,下边的故事赶紧更新啊
        曾经像素有点低:@铛铛铛的登场 :smile::smile:你也喜欢看海贼王啊,我也是呢

      本文标题:【code_小马】多线程的底层实现

      本文链接:https://www.haomeiwen.com/subject/yksfwttx.html