标签:
---恢复内容开始---
多线程的中的一些概念
进程: 进程是CPU分配资源和调度的单位
系统中正在运行的一个应用程序
线程: 线程是CPU调用(执行任务)的最小单位
一个进程中的所有的任务都是在线程中执行,一个进程必须要有一个线程,在程序运行的时候默认创建一条线程称之为"UI线程"或者"主线程"
线程中是串行执行任务,也就是说,一条线程想要执行多个任务,只能按顺序的执行,同一时间线程中只能执行一个任务
多线程:
一个进程中可以开多条线,每条线程可以并行(同时)执行不同的任务--提高程序的执行效率,但是同一时间CPU只能处理一条线程,只有一条线程在工作
多线程的原理:多条线程并发执行,本质就是CPU在多条线程之间快速的切换 如果CPU调度线程的时间够快,就构成多线程并发执行的假象
多线程的好处:
提高程序的执行效率
注意:但是并不是线程开的越多越好,下面就是开启的子线程过多的弊端:
1.CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源
2.每条线程被调度执行的频次会降低(线程的执行效率降低)效果适得其反
开发中常见的线程用法:
将耗时的操作放到子线程中
如果将耗时的操作放到主线程中去: 耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验
iOS中多线程的实现方案
pthread:一套通用的API适用于Unix Linux Windows 跨凭条 但是使用难度大,纯C语言的 开发中一般不用
NSThread:对pthread的一层封装,更加面向对象, 简单易用 直接操作线程对象 OC语言 但是我们需要管理它的生命周期(创建 启用)
GCD:苹果开发的一套纯C语言的API 充分利用设备的多核, 并且有很多强大的接口调用 在开发中经常使用 替代NSThread 自动管理
NSOperation:基于GCD(底层是GCD) 更加的面向对象 自动管理
NSThread具体实现:
一个Thread对象代表一条线程
常见的三种方式:
1.alloc init 方式 必须调用-start方法, 下面会介绍线程的状态
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start];
2.创建线程后自动启动线程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
3.隐式创建并启动线程
[self performSelectorInBackground:@selector(run) withObject:nil];
2 3方式的创建,快速,缺点不可以对线程进行详细的设置
开发中常用到NSThread开判断当前所处的线程
1 获得当前线程
NSThread *current = [NSThread currentThread];
1 [NSThread sleepForTimeInterval:(NSTimeInterval)];
2 [NSThread sleepUntilDate:(nonnull NSDate *)];
线程的状态
标签:
原文地址:http://www.cnblogs.com/mshong/p/5334353.html