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. hdu1428之dfs+spfa

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. hdu3496(二维背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3496 题意:题意是 DuoDuo 想看n部电影,但是被要求最长能看的总时间数为 L,每部电影有他的时长 ...

  3. Winform通用模块之流水号生成

    打算接下来的时间里把自己觉得用起来还比较好用的通用模块,在这里向大家介绍一下,如果你有更好的想法时,也希望你不吝指点. 1.数据库表及存储过程 在介绍这个通用流水号生成的模块前,我们先来看一下其相关的 ...

  4. 一个用js写的接口http调试程序

    公司有非常多手机app的项目.手机app又要常常訪问后台提交与查询数据. 所曾经端app与后台的开发与測试过程中接口调试是一个常常要做的工作. 而每当出现一个BUG,前端appproject师与后台p ...

  5. POJ 1838 Banana (并查集)

    Description Consider a tropical forrest, represented as a matrix. The cell from the right top corner ...

  6. ECshop 表结构

    -- 表的结构 `ecs_account_log`CREATE TABLE IF NOT EXISTS `ecs_account_log` (`log_id` mediumint(8) unsigne ...

  7. linux查看某个进程CPU消耗较高的具体线程或程序的方法

      目前我们的监控,可以发现消耗较高CPU的进程(阀值为3个CPU),通过监控我们可以找到消耗较高CPU的进程号: 通过进程号pid,我们在linux上可以通过top –H –p <pid> ...

  8. javascript一元操作符(递增,递减)

    <script type="text/javascript"> var a="1"; var b=false; var c="dd&quo ...

  9. 两个div在同一行,两个div不换行

    方法一: <div style="display:inline"> <div id="div1" style="float:left ...

  10. Android数据库高手秘籍(五)——LitePal的存储操作

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39345833 经过前面几篇文章的学习,我们已经把LitePal的表管理模块的功能都 ...