Objective-c——多线程开发第一天(pthread/NSThread)

一、为什么要使用多线程?

1、循环模拟耗时任务

1、同步执行

2、异步执行

(香烟编程小秘书)

3、进程

系统中正在运行的一个应用程序

每个进程之间是独立的, 均运行在其专用的且受保护的内存空间

通过活动监视器,可以查看mac系统中的开启进程

(外挂修改游戏进程中的数据,外挂用c汇编等底层)

4、线程

1个进程由一个或多个线程组成

是进程的基本执行单元(至少一个线程)

多线程:

1个进程可开启多个线程,多个线程可以“同时”执行不同任务

进程-公司,线程- 员工:老板:主线程

多线程可以提高程序的执行效率

1、安卓相隔一个虚拟机

2、每一个晶体管中的核很小,逻辑没有苹果单核性能高

3、苹果的cpu号称可以击败台式机的cpu

单核执行原理:

4个线程,线程1执行完紧接线程2?

假设成立:线程1死循环还能跑?所以假设不成立

多线程:不等待线程1执行完毕再执行线程2

之所以说多线程同时进行,其实是切换进行,只是时间很快近乎同时

多线程的优点:

1、能适当提高程序的执行效率

2、能够适当的提高资源的利用率

多线程的缺点:(成本:时间成本/空间成本

1、空间成本:每个线程占用的空间512kb

2、时间成本:创建一个线程 大约90毫米

3、线程间的通信,多线程的数据共享

总结:线程之间是cpu切换执行

1、老板——主线程(UI线程)

程序的入口:main (AppDelegate)程序的生命周期

所有的代码都是通过线程执行的

主线程干的都是ui相关的事

performSelectioInBackground

重点:Ios中多线程的实现方案:

1、pthread:历史悠久,,表示一种可以跨平台的方法,一段代码可以在iphoneandroid、windows几乎不用:语言C

使用难度大,程序员要自己管理它的生命周期,

2、NSThraad (NS开头术语Foundation框架,oc语言,面向对象:封装继承动态)

还是要自己管理生命周期,偶尔使用

3、GCD 也是C语言写的,经常被使用,苹果开发的技术,充分利用多核,很好优化,“透明”

自动管理线程

4、NSOperation:(NS OC写的foundation框架中的)

对GCD的封装:相当于继承gcd的优点

比GCD多了一些更简单实用的功能,使用更加面向对象

ptread的介绍:

p什么意思:p代表POSIX 表示可移植(跨平台)

1系统导入的头文件,用尖括号

#import<pthread.h>

pthread_create:

参数一、pthread_t:线程的标示

参数二:ptheard_attr:attribute:属性

c语言的话为空填入NULL

参数三、:void *(*)(void *) :函数签名

void *代表:约等于oc中的id 任意一个对象 返回值

(*)函数名

(void *)参数

创建一个函数 线程要运行的函数:

void * task (void *param)

{

return NULL;

}

填入:task:函数的首地址

参数四:

void *restrict:给第三个参数的函数一个参数

NULL;

5、pthread _create返回值是一个数字 “0”代表成功,非0则失败

if(result == 0)

NSLog(@“ok”);

说明线程创建成功了

6、 [NSThread currentThread]:打印当前线程

只要number不等于1 就是一个子线程,number=1就是一个主线程中运行

[_bridge NSString]桥接,在oc中写c

桥接的意思是:默认ARC下对OC对象有内存管理,不对C变量管理,桥接的作用是,C变量在适当的时候被释放

总结:

1、导入头文件

2、创建线程pthread_Create

3、创建函数方法 void *task(void*param)

4、传递参数

二、NSThread的简单介绍

NSThread=[NSThread alloc

initWithTarget:]

参数1:对象

参数2:方法

参数3:方法需要的参数

NSThread这样创建是不会跑的

这样写只是在内存中创建一个对象

2、开启线程

[thread start]

方法二、创建线程:

-(void)demo2

{

//detach:分离,可以理解为创建

detachNewThreadSelector:

参数1、方法

参数2: 对象

参数3:方法需要的参数

[NSThread detachNewThreadSelector。。]

}

方法二的确定:如果你要对NSThread进行其他设置不便

但是代码量少了

方法三、

参数1:方法

参数2:方法的参数

为啥没有参数:因为用的是self

[self performSelectorInBackground

压根没提thread:隐式创建线程

线程的生命周期:

线程的状态:

1、创建线程

2、开启线程:在内存中的变化:多了一个可调度线程池:好多线程,且CPU可以调度它

new(新建)-》就绪(Runnable)——》CPU调度当前线程——》运行(running-》阻塞状态-》运行-》死亡

就绪:这个线程除了CPU资源之外,别的资源都已到位

cpu的来回切换,使CPU在当前线程和别的线程之间来回切换,而线程则在运行和就绪这两个状态之间来回切换

运行的时候,如果除了cpu资源外,其它资源也没有了,那么就会调用Sleep方法\等待同步锁

因为不可调度,就会进入阻塞状态  离开可调度线程池

要是苏醒了 线程会从阻塞状态进入运行状态吗?

不会! 这时候不会直接到运行状态,而是回到就绪状态(sleep倒是\得到同步锁)

线程任务执行完毕 会死亡(死亡可以是自杀:也可以是他杀:强制结束线程)

三、NSThread的常用属性

线程确实是通过切换来进行

同时创建两个线程

第一个0时由哪个线程打印出来的?

不清楚:那就给线程起名字

thread.name [email protected]“ ”

thread.threadPirority

多线程的基本概念总结:

1、同步

2、异步

区别:同步是任务顺序执行,异步是同时间可多个运行

3、进程:当前计算机中正在运行的应用程序

4、线程:进程的基本执行单元,一个进程中有一个或多个线程

5、多线程的生命周期和常见属性

特点:线程来回切换运行

主线程:不能在主线程执行耗时操作

优点:

适当的提升资源的利用率

提升程序的执行效率

缺点:

线程不是开的越多越好

因为:时间成本大约90毫秒和空间成本大约512kb

pthread了解:

NSThread 有三种创建方式

1、alloc initWithTargrt

2、detachNew

3、performSelectorInBackground

线程的生命周期:

1、新建

2、就绪

3、运行

4、阻塞

5、死亡

常见属性

1、name

2、优先级threadPirorty

时间: 2024-08-28 19:30:47

Objective-c——多线程开发第一天(pthread/NSThread)的相关文章

iOS多线程开发小demo2,NSThread篇

用NSThread创建子线程的3种方法 // DYFViewController.m // 623-02-pthread // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" #import <pthread.h> @interface DYFViewController

iOS学习——多线程开发(NSThread)

首先我们得知道,cpu仅能同时处理一条线程,多线程并发并不是多条线程同时进行,而是cpu不断在线程间切换进行,所以线程并不是越多越好,当存在大量线程,会让cpu在切换间疲于奔命,反而不利于开发. 具体来说,iOS方面多线程也就是两种,pthread以及NSThread.pthread是C语言写的多线程,好处是不仅仅用在iOS移动端开发,基本上支持C语言的都可以使用,缺点就是C语言的共性了,不易识别,难记而且并不支持arc.所以在iOS中多线程开发还是去了解NSThread更好,pthread掌握

多线程 pthread + NSThread

多线程 pthread + NSThread pthread (C语言) · 规律: C语言中的数据类型一般都是以 _t或者Ref结尾 创建C语言的对象, 一般都用cretae#import <pthread/pthread.h>- (IBAction)btnOnClick:(id)sender { // 1.创建子线程/* 第1个参数:线程代号 (现场对象) 第2个参数:线程的属性 第3个参数:子线程需要执行的操作(调用的方法) void *(*)(void *) 返回值 (*指针名称)参数

iOS多线程开发--NSThread NSOperation GCD

多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验.早在单核处理器时期 就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行, 不影响用户其他UI操作),其处理能力并没有明显的变化.如今无论是移动操作系统还是PC.服务器都是多核处理器,于是“并行

iOS多线程开发——NSThread浅析

在IOS开发中,多线程的实现方式主要有三种,NSThread.NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,可以参考<iOS多线程开发--NSOperation/NSOperationQueue浅析><iOS多线程开发--GCD的使用与多线程开发浅析>.以及对于多线程中的同步异步,并行串行等概念,我在<GCD实践--串行队列/并发队列与iOS多线程详解>中也有较为详细的讲解.为了学习的完整性,今天我们主要从代码层面来实现

多线程编程(二)NSThread的使用

iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用也越方便.实现多线程的方式有很多,我们主要学习其中的三种实现方式:NSThread,NSOpreationQueue,GCD,这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,GCD是抽象程度最高的一种,也是 Apple 最推荐使用的方法. 虽然实现的方式不同,但是操作的对象都是线程,都是对线程的管理.所以,从根本上讲,三者并没有什么不同,可以混合使用,但是并不推荐,因为可能会造成不必要的麻烦.三种多线程的实现方

iOS多线程编程Part 1/3 - NSThread &amp; Run Loop

iOS多线程编程Part 1/3 - NSThread & Run Loop 02 JUNE 2013 前言 多线程的价值无需赘述,对于App性能和用户体验都有着至关重要的意义,在iOS开发中,Apple提供了不同的技术支持多线程编程,除了跨平台的pthread之外,还提供了NSThread.NSOperationQueue.GCD等多线程技术,从本篇Blog开始介绍这几种多线程技术的细节. 对于pthread这种跨平台的多线程技术,这本Programming with POSIX Thread

多线程之pthread, NSThread, NSOperation, GCD

关于多线程会有一系列如下:多线程之概念解析 多线程之pthread, NSThread, NSOperation, GCD 多线程之NSThread 多线程之NSOperation 多线程之GCD pthread:跨平台,适用于多种操作系统,可移植性强,是一套纯C语言的通用API,且线程的生命周期需要程序员自己管理,使用难度较大,所以在实际开发中通常不使用. NThread:是苹果对pthread的一个封装.通过封装可以在Cocoa环境中,可以更简易地用多线程.线程的生命周期由程序员管理.每个N

多线程开发之二 NSOperation

效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UITableViewController 4 @property (strong, nonatomic) NSArray *arrSampleName; 5 6 - (instancetype)initWithSampleNameArray:(NSArray *)arrSampleName; 7 8 @end  ViewContro