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点击无响应。

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

开启子线程。

iOS开发多线程篇—多线程简介的更多相关文章

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

    iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  2. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

  3. iOS开发——高级篇——多线程的安全隐患

    资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题   一.解 ...

  4. iOS开发——高级篇——多线程dispatch_apply

    我们知道遍历数组是一个相对耗时的操作,而同时手机的核是越来越多,所以我们需要充分利用iOS多核的作用. 特别是在遍历操作中还有其他耗时操作.像我们平时直接遍历数组的操作 ,i< ,i++){ / ...

  5. iOS开发——高级篇——多线程GCD死锁

    面试题 请问以下代码打印结果: - (void)interview01 { // 以下代码是在主线程执行的 NSLog(@"执行任务1"); dispatch_queue_t qu ...

  6. iOS开发网络篇—大文件的多线程断点下载

    http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...

  7. iOS开发网络篇—大文件的多线程断点下载(转)

    http://www.cnblogs.com/wendingding/p/3947550.html   iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...

  8. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  9. swift开发多线程篇 - 多线程基础

    swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread  使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...

随机推荐

  1. 开源图计算框架GraphLab介绍

    GraphLab介绍 GraphLab 是由CMU(卡内基梅隆大学)的Select 实验室在2010 年提出的一个基于图像处理模型的开源图计算框架.框架使用C++语言开发实现. 该框架是面向机器学习( ...

  2. 恶补jquery(四)jquery中事件--冒泡

    事件 当我们在打开一个页面的时候.浏览器会对页面进行解释运行,这实际上是通过运行事件来驱动的.在页面载入事件时,运行Load()事件,是这个事件实现浏览器解释运行代码的过程. 事件机制 事件中的冒泡现 ...

  3. nginx 301跳转到带www域名方法rewrite(转)

    首先一.得在你的域名管理里面定义 test.com和www.test.com指向你的主机ip地址,我们可以使用nslookup命令测试:直接输入 nslookup test.com和nslookup ...

  4. [Oracle] - 性能优化工具(4) - AWRDD

    AWRDD是用于比較两个AWR快照,从而获得不同一时候期的性能. 运行例如以下语句获得AWRDD: @?/rdbms/admin/awrddrpt.sql 2025 23 2月 2014 07:12 ...

  5. .Net C# Windows Service于server无法启动,错误 193:0xc1

    1.情况说明:的近期发展windows维修,当地win7系统正常.把server安装会失败. 图中的引导失败的例子.: 解决方法:执行->输入:eventvwr.msc    打开你的事件查看器 ...

  6. c#代码规范和质量检查工具这点事

    c#代码规范和质量检查工具这点事 代码风格检查:StyleCop 代码缺陷检查:FxCop 代码质量: 代码度量值/Code Metrics StyleCop 介绍 The StyleCop tool ...

  7. WPF界面设计技巧(10)-样式的继承

    原文:WPF界面设计技巧(10)-样式的继承 PS:现在我的MailMail完工了,进入内测阶段了,终于可以腾出手来写写教程了哈,关于MailMail的介绍及内测程序索取:http://www.cnb ...

  8. vi 按了ctrl+s之后

    再windows不管是写程序.还是用Word写文件.已经习惯了按ctrl+s 保存代码. 在用vi的时候.常常无意中按了ctrl+s,结果就是如同终端死掉了一样. 这是由于ctrl+s 终止屏幕输出( ...

  9. atitit查询表改动表字段没反应--解锁锁定的表

    atitit查询表改动表字段没反应--解锁锁定的表 查询表改动表字段没反应 要是使用gui 没反应,最好使用cmd 方式,不卉不个gui 锁上.. ALTER TABLE t_mb_awardweix ...

  10. 利用Javamail接收QQ邮箱和Gmail邮箱(转)

    求大神解答 Java代码: public class SendMailController { //@Autowired private JavaMailSenderImpl mailSender; ...