iOS详解多线程(概念篇——进程、线程以及多线程原理)

多线程之概念.png

多线程在我们的开发中占据重要位置,为了系统的总结多线程,我们在这一节中详细的剖析多线程,由浅入深,全面理解多线程。
拒绝搬砖,源码亲测,git上有源码。

本节知识点:

相关概念

  1. 进程
  2. 线程
  3. 多线程
    3.1 单核CPU和多核CPU
    3.2 为什么需要多线程?
    3.3 多线程原理
  4. 主线程
  5. 并发、并行、串行、同步、异步、队列
1.进程

什么是进程?
在手机系统中,每一个应用程序就是一个进程。进程之间互相隔离,运行在自己的受保护的内存中。

2. 线程

每一个进程如果想要正常运行,至少要有一个线程,必须要有的这个线程我们一般称为『主线程』。
一个进程可以有很多个线程。线程之间也是可以互相通信的。


image.png
3. 多线程
3.1 单核CPU和多核CPU

我们都知道计算机最重要的部件CPU,就像人类的大脑一样,控制着计算机的各种工作。计算机的五大部件还记得吗?运算器、控制器、存储器、输入和输出。CPU就是把运算器和控制器组合到一起,再加上寄存器和CPU总线构成的。

图片来源于网络,侵删.png

我们现在使用的CPU大部分都是单个多核CPU,CPU的核与我们今天研究的线程有什么关系呢?
单核CPU
一个CPU只有一个核心 。
多核CPU
一个CPU有多个核心。

一个核心同时只能处理一个线程。
3.2 为什么需要多线程?

我们知道,一个线程中,任务是顺序执行的。一个任务结束了,才能执行下一个任务。我们的CPU有多个核心,而且一个核心同一时间只能处理一个线程。那么就有问题了,如果只有一个线程,就需要一个核心就可以了,其他核心就不需要了,这不是资源的浪费吗?

只有单个线程的情况:


单线程简单示意图.png

有了多线程以后:


多线程简单示意图.png

因为我们的CPU有了多个核心这个前提,我们的多线程才能够提高效率。如果我们的CPU只有一个核心,这个核心在不同的线程之间切换,不但不会提高效率还会因为切换线程的开销而降低效率。

3.3 多线程原理

同一时间,CPU的一个内核只能处理一个线程,也就是说,CPU同一时间能够处理的线程数是由CPU的内核决定的。
那么,我们开启了多个线程,CPU是如何工作的呢?
多条线程的并发执行,其实是CPU快速的在多条线程之间调度,造成多线程并行的假象。

通俗一点讲,我们的计算机只有一个CPU,假如这个CPU有4个内核,我们现在有3个正在运行的线程,那么就可能有一个内核闲置,其他三个线程是真正的并发。
如果我们开启了10个线程,那么我们的内核就不够了,难道要等其他线程执行完了再执行等待的线程吗?万一这个线程很着急,或者前面未执行的线程很耗时,岂不是很影响体验。就像,我们的手机卡死了,我们点啊,点啊,手指头都痛了,它依然没反应,是不是很生气?
这个时候,我们的CPU会把内核的使用权限分成一个个的时间片,10个线程就像10个小朋友一样排排坐,然后轮流使用cpu,不至于大家有意见。当然,这只是大致描述,真实的CPU调度还是要复杂的多。
我们的系统只有一个CPU,但是我们却又很多的应用程序,同一时间我们也会开启很多应用,比如我一边听歌,一边和朋友聊天,就有可能开启音乐和聊天两个应用,CPU不可能只为某一个应用服务,所以真实的CPU使用情况会更加的复杂。

4. 主线程

一个进程中最重要的线程,也是不可或缺的线程。当程序启动的时候,自动创建了主线程。主线程在整个APP生命周期内一直存在,且一直运行。主线程用来更新UI,处理点击、滑动等触发事件。


image.png
5. 并发、并行、串行、同步、异步、队列
5.1 并发

在一个时间段内,几个线程同时执行,其实是CPU在线程之间快速切换,几个线程轮流使用CPU的结果。

5.2 并行

在一个时间点,注意,是时间点,几个线程同时进行。比如,CPU有8个内核,目前有3个线程分别在3个内核中执行,这三个线程就是并行。

5.3 串行

线程一个接一个的执行。比如有ABC三个线程,A执行完执行B,B执行完执行C,ABC就是串行。

5.4 同步

在当前线程中执行任务,不具备开启新线程的能力。

5.5 异步

在新的线程中执行任务,具备开启新线程的能力。

5.6 队列

队列是对线程进行管理的。有串行队列,主队列,并发队列等。

本章小结

本节中,对于多线程中涉及到的概念进行了全面的理解,这些理解也是参考了很多网友的成果总结而来的。如果有什么偏差,还请指教。
下一节,一起学习多线程的实现方案吧。在iOS中,我们常用的有:

  1. NSThread(OC)
  2. GCD(C语言)
  3. NSOperation(OC)

还有一个 C语言的pthread(C语言)也可以实现多线程。

有什么问题,欢迎留言讨论。

下一节:详解多线程(实现篇)

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