iOS 底层探索之多线程(一)—进程和线程

前言

\color{red}{iOS}的面试中\color{red}{多线程}是经常被问到的,\color{red}{多线程}也是一个难点,很多面试者平时用的不多,因此很难回答到点子上,那么本篇博客就对\color{red}{多线程}进行探索和分析。

1. 进程和线程

什么是进程

  • 进程是指在系统中正在运⾏的⼀个应⽤程序,它是程序执行时的一个实例。
  • 程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入* 进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
  • 每个进程之间是独立的,每个进程运行在其专有的且受保护的内存空间内
    在 MAC电脑上,可以通过“活动监视器”查看所开启的进程


iOS 开发是单进程,安卓是可以多进程

什么是线程

  • 线程是进程的基本执行单元,一个进程中的所有任务都是在线程中执行的
  • 进程想要执行任务必须得有线程,一个进程至少有一条线程
  • 程序启动是会默认开启一条线程,这条线程被称为主线程或者 UI线程

进程和线程的区别

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。
  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

2.多线程的意义

一个进程的任务都是多个的,单线程执行效率肯定是低下的,在开发中都是多线程编程,为什么要使用多线程呢?

举例

  • 测试代码
    NSLog(@"开始");
    NSInteger count = 1000 * 100;
    for (NSInteger i = 0; i < count; i++) {
        // 栈区
        NSInteger num = I;
        // 常量区
        NSString *name = @"RENO";
        // 堆区
        NSString *myName = [NSString stringWithFormat:@"%@ - %zd", name, num];
        NSLog(@"%@", myName);
    }
    NSLog(@"结束");
  • 测试结果
2021-08-08 21:42:15.517924+0800 001----多线程的作用[35508:936771] 开始
2021-08-08 21:42:15.518147+0800 001----多线程的作用[35508:936771] RENO - 0
2021-08-08 21:42:15.518314+0800 001----多线程的作用[35508:936771] RENO - 1
2021-08-08 21:42:15.518468+0800 001----多线程的作用[35508:936771] RENO - 2
。。。。。。。。。。。。。
021-08-08 21:43:03.151830+0800 001----多线程的作用[35508:936771] RENO - 99998
2021-08-08 21:43:03.152314+0800 001----多线程的作用[35508:936771] RENO - 99999
2021-08-08 21:43:03.152691+0800 001----多线程的作用[35508:936771] 结束

在上面的案例中,循环执行\color{red}{十万次的循环},在循中进行还进行局部变量的创建,此过程执行完成共\color{red}{耗时接近一分钟},如果此流程放在\color{red}{主线程},会造成主线程\color{red}{卡顿},极大的影响用户体验。

所以通常情况下,我们都会进行\color{red}{异步处理},开启新的线程对这些事务进行处理,而如果一个事务很复杂,比较耗时,可以将一个大的事务拆分成多个小的事务进行并发处理,这样可以节省时间,并且不会影响用户的体验。

多线程的优缺点

\color{red}{优点}

  • 能适当提⾼程序的执⾏效率
  • 能适当提⾼资源的利⽤率(如CPU,内存)
  • 线程上的任务执⾏完成后,线程会⾃动销毁

\color{red}{缺点}

  • 开启线程需要占⽤⼀定的内存空间(默认情况下,每⼀个线程都占512KB)
  • 如果开启⼤量的线程,会占⽤⼤量的内存空间,降低程序的性能
  • 线程越多,CPU在调⽤线程上的开销就越⼤,程序设计更加复杂,⽐如线程间的通信、多线程的数据共享

3. 时间片

时间片timeslice)又称为“量子(quantum)”或“处理器片(processor slice)”是分时操作系统分配给每个正在运行的进程微观上的一段CPU时间(在抢占内核中是:从进程开始运行直到被抢占的时间)

简单来说就是:CPU时间片即CPU分配给多个程序的时间,每个线程被分配一个时间段,称作它的时间片。

宏观上,我们可以同时打开多个应用程序,每个程序并行不悖,同时运行;
微观上,由于只有一个\color{red}{CPU},一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序\color{red}{轮流执行}

\color{red}{多线程的执行}:是\color{red}{CPU}快速的在多个线程之间进行切换。线程数过多,\color{red}{CPU}会在多个线程之间切换,销毁大量的CPU资源,反而导致执行效率的下降。
\color{red}{多线程同时执⾏}:是\color{red}{CPU}快速的在多个线程之间的切换,\color{red}{CPU}调度线程的时间⾜够快,就造成了多线程的同时执⾏的效果。
\color{red}{如果线程数⾮常多}\color{red}{CPU}会在N个线程之间切换,消耗⼤量的\color{red}{CPU}资源,每个线程被调度的次数会降低,线程的执⾏效率降低。

iOS底层探索之多线程(二)—线程和锁

更多内容持续更新

🌹 喜欢就点个赞吧👍🌹
🌹 觉得有收获的,可以来一波,收藏+关注,评论 + 转发,以免你下次找不到我😁🌹
🌹 欢迎大家留言交流,批评指正,互相学习😁,提升自我🌹
🌹 作者邮件:zhangxmsy@163.com 有问题联系。

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