漫谈多线程(一)

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

二.多线程提的比较的多的概念可能就是同步和异步了,什么是同步,简单说就是前面的任务没完成的话不执行后面的任务,异步就是前面的任务就算没执行完,后面的任务也开始执行.比如生活中,我们下班回家了,需要做饭,洗衣服,拖地.同步的方式就是一.先用电饭锅开始煮饭,花了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相关的操作放在主线中,耗时操作一般是放在子线程中的)

时间: 2024-12-20 19:05:49

漫谈多线程(一)的相关文章

漫谈多线程(下)

接着上一篇继续学习多线程. 死锁(DeadLock) 当多线程共享资源时,各占一部分资源,而又在等待对方释放资源,这样的情况我们称为死锁.下面通过一个生动的程序来理解死锁. class Program { private static object knife = new object(); //临界资源:刀子 private static object fork = new object(); //临界资源:叉子 //方法:拿起刀子 static void GetKnife() { Conso

漫谈多线程(二)

一.多线程实现方案 1>pthread 1)语言:C语言 2)特点: (1)通用的多线程API (2)适用于Unix\Linux\Windows等 (3)跨平台\可移植 (4)使用难度大 3)生命周期:程序员管理 示例: -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //1.创建一个pthread对象 pthread_t thread; //2.创建线程 /* 第一个参数:线程对象

漫谈多线程(中)

这一篇接着上一篇来继续学习多线程. 线程同步 在大多数情况下,计算机中的线程会并发运行.有些线程之间没有联系,独立运行,像这种线程我们称为无关线程.但也有一些线程,之间需要传递结果,需要共享资源.像这种线程,我们称为有关线程.比如,我们网上观看电影,一个线程负责下载电影,一个线程负责播放电影.它们只有共同合作我们才能观看到电影,它们之间共享资源.由此,我们可以看出,线程的相关性体现在对同一资源的访问上.我们把这种供多个线程访问的资源成为临界源(Critical Resource).访问临界源的代

漫谈多线程(上)

hey,you guys.      好久不见了,最近忙着学习英文,处理一些杂事,所以没有来得及更新博客.公司目前没活,比较清闲.所以,有时间研究了一下<叩响C#之门>.据说作者是一位40多岁的初中数学老师,自学C#.40多岁的人自学编程,这份毅力很令人敬佩.这本书写的,是C#语言的基础知识.作者讲解的很清楚,读后很受益.很多之前一知半解,甚至一点都不懂得基础原理,现在豁然开朗.就像孔子所说:"朝闻道,夕死可矣."这本书,真的适合初级.NET程序员读一下,真的很有帮助的.好

IOS 多线程漫漫谈(Process and Thread)

前言 时间就是一把杀猪刀,岁月更是毫不留情的在我英俊的脸上留下痕迹!恨呀,这就开始了我的社会之旅.2015年上海,在拉钩网中投遍了IOS实习岗,两家面试!在面试中受到的打击着实不清呀,其中心酸就不一一道来了.在学校时候学的不认真,学习的时候又没有笔记,知识在又没有实际的项目实践,最后的结果就是什么都知道都听过,但是具体的什么都说不出来!所以毅然决然的决定投身于写博客的大队伍中,与各位共勉. (PS:既然是社会之旅,除了技术的敲门砖,当然还有就是做人了!我只能说我被HR给刷过) 漫漫谈(Proce

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

前言 原本这篇博客的标题叫<窗体和线程漫谈>,但想来想去确实不太合适.由于我确实没有写关于窗体和线程的不论什么理论知识,而仅仅是探讨了工作线程怎样将数据的处理结果显示到窗体这个问题,因此又一次改动标题. 另外,关于窗体和线程的相关理论知识.感觉一两句话确实说不清楚,并且<Windows 核心编程>这本书上介绍的也挺好的.有机会再写吧.特别是感觉如今好多人都直接在学 MFC,用 MFC.甚至连窗体过程,消息循环都不太明确,假设能有这样一篇博客也是非常有价值的. 为什么要讨论这个问题

HTTP 协议漫谈

转载出处:HTTP 协议漫谈 简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 HTTP 协议的元素进行分类讲解. HTTP的定义和历史 在一个网络中.传输数据需要面临三个问题: 1.客户端如何知道所求内容的位置? 2.当客户端知道所求内容的位置后,如何获取所求内容? 3.所求内容以何种形式组织以便被客户端所识别? 对于WEB来说,回答上面三种问题分别采用三种不同的技术,分别为:统一资源定

漫谈并发编程(一) - 并发简介

并发编程是每个程序员进阶的必修之课,想写一个安全稳定,性能强劲的并发程序可没那么容易.我将在未来的日子里,与大家分享一个并发小白成长路上的所思所想.并发编程的思想是通的,但是例子得要是具现的,在该系列中将使用java语言用以演示. 此文作为为漫谈并发编程系列的第一篇,由于本人喜欢先论理再论事,而非先论事再论理,所以就以一篇对并发的文字描述开头了. 并发编程由来 早年的计算机中没有操作系统,在某个时间段内只支持运行一个程序,并且这个程序能访问计算机的所有资源.在这个程序完全执行完后,再执行下一个程

漫谈并发编程(一) - 并发简单介绍

并发编程是每一个程序猿进阶的必修之课,想写一个安全稳定,性能强劲的并发程序可没那么easy.我将在未来的日子里,与大家分享一个并发小白成长路上的所思所想.并发编程的思想是通的,可是样例得要是具现的,在该系列中将使用java语言用以演示. 此文作为为漫谈并发编程系列的第一篇,探本溯源,以一篇对并发的文字描写叙述开头. 并发编程由来 早年的计算机中没有操作系统,在某个时间段内仅仅支持运行一个程序,而且这个程序能訪问计算机的全部资源.在这个程序全然运行完后,再运行下一个程序. 在此时,引入并发编程的优