漫谈多线程

Posted 奈文摩尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漫谈多线程相关的知识,希望对你有一定的参考价值。

一.多线程这里的东西个人觉得整体的设计灵感来自于生活,多线程的目的是为了提高程序运行的效率,映射到我们生活中,是能找到异曲同工之妙的.

二.多线程提的比较的多的概念可能就是同步和异步了,什么是同步,简单说就是前面的任务没完成的话不执行后面的任务,异步就是前面的任务就算没执行完,后面的任务也开始执行.比如生活中,我们下班回家了,需要做饭,洗衣服,拖地.同步的方式就是一.先用电饭锅开始煮饭,花了10分钟,我们看着电饭锅把饭煮熟,二.然后再去用洗衣机洗衣服,花了10分钟,看着洗衣机把衣服洗完,三.再来拖地花了5分钟.总共花了25分钟.异步的方式就是一.先把电饭锅插好电让它开始煮饭,二.然后再打开洗衣机让它开始洗衣服,三.然后我们再来拖地.当着3件事都完成了,总共也就是花了10分钟了.效率不言而喻了.

三.对于单核cpu,多线程只是一种假象,它是在多个任务之间完成快速的调度,以提高cpu的使用效率(但是它也有上限的,并不是给的任务越多效率越高),就像上面的例子所提到,做饭,洗衣服,拖地其实都是一个人完成的.对于多核的情况,就好比上面的3件事情是由3个人一起完成.

四.好了,对多线程有个初步的大概的理解,我们再说下相关的专业名词.

1>进程:指的是正在运行的应用程序

2>线程: cpu调度的最小单位,真正用来执行任务的 

3>多线程:一个进程中开启多条线程并行执行任务

4>串行:同一个线程内部执行多个任务(可以理解为串在一根绳子上,前面的任务执行完后再执行后面的)

5>并行:多个线程同时执行任务(可以理解为在操场上跑步比赛,多个人在多条跑道上一起奔跑,每个跑道就是一个线程)

6>并发:多个任务需要同时执行

7>同步:(任务的执行方式) 前面的任务执行完后,再开始执行后面的任务

8>异步:(任务的执行方式) 前面的任务不管有没有执行完,后面的任务也开始执行

9>同步函数:dispatch_sync   只能在当前的线程中执行,不能开启新的线程

10>异步函数 :dispatch_async  可以在新的线程里执行,具有开启新的线程能力,但不一定开启新线程

11>主线程:ios程序跑起来的时候默认运行的线程就是主线程,它的作用是刷新和显示UI,处理UI相关事件

12>子线程: 除了主线程,其他的线程都是子线程,子线程一般不要用来刷新UI(但个人经验遇到过一个问题,SVProgressHUD的一个弹窗在子线程中可以显示,但最好放在主线程里,因为我们开发中,通常都是把和UI相关的操作放在主线中,耗时操作一般是放在子线程中的)

以上是关于漫谈多线程的主要内容,如果未能解决你的问题,请参考以下文章

多线程漫谈

多线程的风险漫谈

漫谈并发编程:线程之间的协作

漫谈并发

Windows线程漫谈界面线程和工作者线程

窗体和线程漫谈之工作线程怎样将数据的处理结果显示到窗体