轻量级应用开发之(12)多线程简绍-01

一、进程和线程

1.什么是进程  

  进程是指在系统中正在运行的一个应用程序
  每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内

  比如同时打开迅雷、Xcode,系统就会分别启动2个进程

  通过“活动监视器”可以查看Mac系统中所开启的进程

2.什么是线程

  1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)

  线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行

  比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行

3.线程的串行

  1个线程中任务的执行是串行的

  如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务

  也就是说,在同一时间内,1个线程只能执行1个任务

  比如在1个线程中下载3个文件(分别是文件A、文件B、文件C)

二、多线程

1.什么是多线程

  1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务

  进程 ->车间,线程->车间工人

  多线程技术可以提高程序的执行效率

  比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C)

2.多线程的原理

  同一时间,CPU只能处理1条线程,只有1条线程在工作(执行)?多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)?如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象?思考:如果线程非常非常多,会发生什么情况??CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源?每条线程被调度执行的频次会降低(线程的执行效率降低)

3.多线程的优缺点

1)多线程的优点
  能适当提高程序的执行效率
  能适当提高资源利用率(CPU、内存利用率)
2)多线程的缺点
  开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
线程越多,CPU在调度线程上的开销就越大
  程序设计更加复杂:比如线程之间的通信、多线程的数据共享

4.多线程在iOS开发中的应用

1)主线程:一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”
2)主线程的主要作用
  显示\刷新UI界面
  处理UI事件(比如点击事件、滚动事件、拖拽事件等)
3)主线程的使用注意:别将比较耗时的操作放到主线程中。
  耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验

时间: 2024-08-27 11:57:30

轻量级应用开发之(12)多线程简绍-01的相关文章

ActiveMQ简单简绍(“点对点通讯”和 “发布订阅模式”)

ActiveMQ简单简绍 MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBMWEBSPHERE MQ. MQ特点: M

iOS开发网络篇—多线程断点下载

iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: 1 #import "YYViewControl

微服务开发的12项要素

spring cloud官方文档提到的服务开发的12项要素. I. Codebase从一个代码库部署到多个环境.II. Dependencies使用显式的声明隔离依赖,即模块单独运行,并可以显式管理依赖.III. Config在系统外部存储配置信息.IV. Backing Services把支持性服务看做是资源,支持性服务包括数据库.消息队列.缓冲服务器等.V. Build, release, run严格的划分编译.构建.运行阶段,每个阶段由工具进行管理.VI. Processes应用作为无状态

Python学习(基础简绍)

今天终于开始了python的学习,至于python的历史我就不说了,百度百科中太详细了,我这里说就是关公面前耍大刀,太自不量力了,所以,废话不多说,直接讲讲我惊天学习Python的收获吧. 1.Python的安装 Python的安装非常简单,就像是这门语言的特点,简单易学.安装时不用繁琐的配置环境,只要找对版本,直接选择安装目录,剩下的就是傻瓜式操作,只要点击下一步就OK了,不过安装完成有一点不好,没有桌面的快捷方式,这个得手动添加,其它的在安装的时候都自动帮你准备好了. 在安装完成后,这时你可

Java简明教程 12.多线程(multithreading)

单线程和多线程 关于它们的区别,zhihu上有一个回答,我认为十分不错,如下: 1. 单进程单线程:一个人在一个桌子上吃菜. 2. 单进程多线程:多个人在同一个桌子上一起吃菜. 3. 多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢.例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了.此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 例子: 多线程: 浏览器浏览一个页面,里面有很多图片,多

iOS开发之网络多线程

iOS开发之网络多线程 1. pthred (POSIX) 一般情况不用 2. NSThread NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(dealThreadExit:) object:nil]; [thread1 start]; [NSThread detachNewThreadSelector:@selector(detailTextLabel) toTarget:self wi

开发路程(12):ashx文件和aspx

ashx文件和aspx文件有什么不同? 我们先新建一个ashx文件看看: 1 <%@ WebHandler Language="C#" Class="Handler" %> 2 using System; 3 using System.Web; 4 public class Handler : IHttpHandler 5 { 6 public void ProcessRequest (HttpContext context) 7 { 8 context

Windows Phone开发(12):认识一下独具个性的磁贴(转)

对"磁贴"的理解是一点也不抽象的,为什么呢?只要你愿意启动WP系统,无论你是在模拟器中还是在真机中,是的,桌面上那一块块像地板的玩意儿,就是磁贴了.(图:磁贴) 在上图中,我们很直观地看到磁贴图块的"真"面目,呵呵,其实很明显,这个设计真的很有个性,老实说,WP刚推出的时候,很多人说它这个那个的,其实这些人只过是起起哄罢了.我是挺喜欢桌面上那一块块的图块的,这也是WP第一次给我留下的深刻印象,毕竟在安卓和IOS上,我们看到的都是传统手机的图标显示方式,而WP总让我觉

开发路程(12):颜色采集器colpick Color Picker

简单 RGB.HSB.十六进制颜色选取器 jQuery 插件. 非常直观类似 Photoshop 的界面. 光明和黑暗很容易自定义 CSS3 外观. 28 KB 总由浏览器加载看起来不错甚至在 IE7及工程非常容易实现.下过如图: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>colpick</title> 6 <s