码迷,mamicode.com
首页 > 移动开发 > 详细

iOS-多线程

时间:2016-03-29 21:27:39      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

---恢复内容开始---

多线程的中的一些概念

  进程:  进程是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 *)]; 

线程的状态

技术分享

iOS-多线程

标签:

原文地址:http://www.cnblogs.com/mshong/p/5334353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!