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. ByteBuffer和String的互相转换

    import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java ...

  2. python(abi) RPM DEB Download

    python(abi) RPM DEB Download python(abi) RPM DEB Download

  3. Hadoop Hive与Hbase关系 整合

    用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...

  4. C# 开发Chrome内核浏览器(WebKit.net)

    原文地址:http://www.cnblogs.com/linyijia/p/4045333.html

  5. JqGrid 显示表

    JqGrid 下表显示了前台图书馆.使用起来非常方便. 我在这里分享使用中遇到的问题及解决方案 ** 一.rowNum属性 ** 1.假设不设置,默认显示数是20,也就是说超过20以后的数据.不再显示 ...

  6. [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)

    Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9613   Accepted: 2 ...

  7. POJ 2182 Lost Cows(牛排序,线段树)

    Language: Default Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9207   Acce ...

  8. python : 批量下载R语言库包

    soupR.py 代码例如以下 # -*- coding: cp936 -*- import urllib import urllib2 import os, re from BeautifulSou ...

  9. STM32F103 TIM1输出PWM设置

    //TIM1 分频 #define TIM1_DIV1 (1-1) #define TIM1_DIV2 (2-1) #define TIM1_DIV4 (4-1) #define TIM1_DIV8 ...

  10. TextView 使用自定义的字体和亮点

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/40478815 如今非常多应用中喜欢使用自己定义字体,今天我就来实如今TextView中使用自 ...