Objective-C 多线程

本文详细介绍了Objective-C中的多线程技术,包括进程、线程和线程通信的概念,以及多线程的优点和缺点。重点讲解了Pthread、NSThread、GCD和NSOperation的使用方法和特性,如线程的同步异步执行、队列类型、任务调度、线程通信、一次性代码和队列组等,并提到了多线程可能导致的问题,如互斥锁和死锁。
摘要由CSDN通过智能技术生成

我们介绍多线程首先我们需要一些基础知识一下我们一一介绍

进程

进程:指在系统中正在运行的一个应用程序,每个进程是独立,每个京城都运行在其专用受保护的内存空间。这也就是说多进程要比多线程健壮我们之后介绍。

线程

线程:是进程的基本执行单元,一个进程的所有任务都在线程中执行,在一个线程中任务都是串行(顺序执行)。

线程通信

线程通信:在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信,比如一个线程传递数据给另一个线程,执行完一个线程的任务后在执行另一个线程。

多线程

多线程:一个进程中开启多条线程,每条线程并发(同时)执行不同的任务,多线程可以提高程序的执行效率。

原理

同一时间,CPU只能处理1条线程,只有1条线程在工作(执行),多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。同样如果频繁的切换线程,使得CPU在N个线程之间调度,消耗大量的的CPU资源使得线程的执行效率降低,多线程开发我们要找到平衡点,控制线程的数量。

优点

提高程序的执行效率,不会因为一些耗时操作影响其他功能正常运行同时还可以提高资源利用率,CPU和内存的利用率。

缺点

开启线程会占用一定的内存空间,如果大量的开启线程会占用大量的内存空间,同时CPU在调度线程上也会占用资源,在程序设计会变得复杂,线程的通信和数据的共享等等。

iOS的多线程的实现目前有4种:Pthread, NSThread, GCD, NSOperation,以下我们分别介绍。

Pthread

Pthread是一套通用的API,多个平台支持,它是基于C语言的,线程的生命周期需要我们手动管理,使用难度大,平时开发基本不用。我们还是来一个简单的例子

    //创建一个线程并自动执行
    pthread_create(&thread, NULL, start, NULL);

NSThread

NSThread是Objective-C对C语言Pthread的封装,面向对象简单易用,可直接操作线程对象,同样生命周期需要我们管理。开发中不常使用,以下是对NSThread方法得说明。

  • 创建、启动线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(test) object:nil];
[thread start];
  • 主线程相关用法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程
  • 获得当前线程
    NSThread *current = [NSThread currentThread];
  • 线程的名字
- (void)setName:(NSString *)n;
- (NSString *)name;
  • 线程的调度优先级,调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高
+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;
- (double)threadPriority;
- (BOOL)setThreadPriority:(double)p;
  • 创建线程后自动启动线程
[NSThread detachNewThreadSelector:@selector(test) toTarget:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值