iOS开发多线程篇—多线程简介
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开发多线程篇—多线程简介的更多相关文章
- iOS开发网络篇—多线程断点下载
iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...
- iOS开发UI篇—CALayer简介
iOS开发UI篇—CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...
- iOS开发——高级篇——多线程的安全隐患
资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 一.解 ...
- iOS开发——高级篇——多线程dispatch_apply
我们知道遍历数组是一个相对耗时的操作,而同时手机的核是越来越多,所以我们需要充分利用iOS多核的作用. 特别是在遍历操作中还有其他耗时操作.像我们平时直接遍历数组的操作 ,i< ,i++){ / ...
- iOS开发——高级篇——多线程GCD死锁
面试题 请问以下代码打印结果: - (void)interview01 { // 以下代码是在主线程执行的 NSLog(@"执行任务1"); dispatch_queue_t qu ...
- iOS开发网络篇—大文件的多线程断点下载
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...
- iOS开发网络篇—大文件的多线程断点下载(转)
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- swift开发多线程篇 - 多线程基础
swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread 使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...
随机推荐
- 解决SQL查询总是超时已过期
解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状: Microso ...
- crm操作安全字段
using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; /// <summary> ...
- MySQL中Procedure事务编写基础笔记
原文:MySQL中Procedure事务编写基础笔记 目录: 一.PROCEDURE: 二.CREATE PROCEDURE基本语法: 三.PROCEDURE小进阶 3.1.基本的DECLARE语 ...
- 在mysql数据库中关于日期时间字段的处理
在mysql数据库中关于日期时间字段的处理 在开发中,日期时间字段一般有如下几种设计 假设要获取2013-08-15日到2013-08-16日之间的记录 1. 直接使用日期时间类字段 相关sql语句如 ...
- Cloudera hadoop-2.3.0-cdh5.1.0 在Centos 6.5 下的安装
安装前准备 1. 虚拟机3个.安装Centos 6.5, 内存设置为4GB 2. 配置yum源为163(不配置,在安装软件时,慢的要死) 3. 关闭防火墙( iptables).disabled ...
- 收藏的Android很好用的组件或者框架。
收藏的Android很好用的组件或者框架. android框架 先说两个站点: http://www.androidviews.net/ 非常好的国外开源码站,就是訪问速度有点慢啊 http://w ...
- Access之C#连接Access
原文:Access之C#连接Access 如果是个人用的小程序的话.一般都推荐用Sqlite和Access 使用SQlite数据库需要安装SQLite驱动,详情:SQLite之C#连接SQLite 同 ...
- Linux使用快捷键,who命令,rm命令,ps命令,cd,命令kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim配置的一部分,相关命令
1.进入Ubuntu开场后的终端窗口的快捷键是: ctrl + alt+t:通过这个命令能够打开终端. ctrl + alt+t:通过这个命令能够打开终端. 再开一个tab选项卡式 ...
- 在JAVA中使用LUA脚本记,javaj调用lua脚本的函数(转)
最近在做一些奇怪的东西,需要Java应用能够接受用户提交的脚本并执行,网络部分我选择了NanoHTTPD提供基本的HTTP服务器支持,并在Java能承载的许多脚本语言中选择了很久,比如Rhino,Jy ...
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等(转)
你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, ...