iOS开发多线程篇—多线程简介

一、进程和线程

1.什么是进程

进程是指在系统中正在执行的一个应用程序

每一个进程之间是独立的。每一个进程均执行在其专用且受保护的内存空间内

比方同一时候打开QQ、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.多线程的优缺点

多线程的长处

能适当提高程序的运行效率

能适当提高资源利用率(CPU、内存利用率)

多线程的缺点

开启线程须要占用一定的内存空间(默认情况下。主线程占用1M,子线程占用512KB)。假设开启大量的线程,会占用大量的内存空间,减少程序的性能

线程越多,CPU在调度线程上的开销就越大

程序设计更加复杂:比方线程之间的通信、多线程的数据共享

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

主线程:一个iOS程序执行后,默认会开启1条线程。称为“主线程”或“UI线程”

主线程的主要作用

显示\刷新UI界面

处理UI事件(比方点击事件、滚动事件、拖拽事件等)

主线程的使用注意:别将比較耗时的操作放到主线程中。

耗时操作会卡住主线程,严重影响UI的流畅度。给用户一种“卡”的坏体验

5.代码演示样例

 1 //
2 // YYViewController.m
3 // 01-堵塞主线程
4 //
5 // Created by apple on 14-6-23.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYViewController.h"
10
11 @interface YYViewController ()
12 - (IBAction)btnClick;
13 @end
14
15
16 @implementation YYViewController
17
18
19 - (void)viewDidLoad
20 {
21 [super viewDidLoad];
22 }
23
24
25 //button的点击事件
26 - (IBAction)btnClick {
27 //1.获取当前线程
28 NSThread *current=[NSThread currentThread];
29 //2.使用for循环运行一些耗时操作
30 for (int i=0; i<10000; i++) {
31 //3.输出线程
32 NSLog(@"btnClick---%d---%@",i,current);
33 }
34 }
35
36 @end

运行效果:

说明:当点击运行的时候,textView点击无响应。

运行分析:等待主线程串行运行。

开启子线程。

最新文章

  1. DOM扩展-Selectors API(选择符 API)、元素遍历
  2. 详解Java中ArrayList、Vector、LinkedList三者的异同点
  3. IOS设计模式之三(适配器模式,观察者模式)
  4. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
  5. Mysql中存储方式的区别
  6. 简单说pyglet.event
  7. Java中的逆变与协变(转)
  8. 跨进程的mutex
  9. PyCharm 2017.3 下载与安装
  10. ASP.NET MVC 5 SmartCode Scaffolding for Visual Studio.Net
  11. PAT1116: Come on! Let&#39;s C
  12. python 图片识别灰度
  13. How to RAMDISK on macOS
  14. C++加载动态库的顺序
  15. 玩转物联网之MQTT
  16. Alpha 冲刺 (3/10)
  17. 《SQL Server 2008从入门到精通》--20180724
  18. django -- verbose_name的对数据库层面的影响
  19. NEWBEE软件团队 人员分配情况及分数获得方式
  20. Spring整合Quartz定时任务 在集群、分布式系统中的应用

热门文章

  1. Codeforces Round #269 (Div. 2) A B C
  2. eval、json.parse()的介绍和使用注意点
  3. cocos2dx手写js绑定C++
  4. 《Cocos2d-x实战(卷Ⅰ):C++开发》
  5. 设计模式学习一:strategyPattern
  6. Eureka 的 Application Client client的执行演示样例
  7. Hibernate对象持久化框架
  8. UI僵死分析
  9. 使用javascript开发2048
  10. 使用Visual Studio 2010 创建简单的Silverlight应用程序