iOS中的多线程

首先,介绍下,进程与线程。

进程,在iOS中,一个App就是一个进程,每个进程都有独立的内存区域和数据。沙盒就是那个独立的存储数据的地方。

而线程,一个进程中有一个主线程,还可以开辟几个子线程,分别进行并行的不同操作。一个进程中的多线程可以共享进程中的内存和数据。线程提高了并发性,大大增强了程序的运行效率。

在iOS中多线程机制也运用很多。

首先多线程的实现方式有以下几种:

1. NSThread:  NSThread 是最为轻量级的多线程方式,但是需要开发者手动管理Thread 的生命周期,线程同步,加锁等工作。现在用NSThread的很少。

 performSelectorInBackground: 调用此方法时,也相当于是使用NSThread的多线程。

2. NSOperation: 不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上去。NSOperationQueue类是一个线程队列管理类,它提供了线程并行,线程管理的处理。一旦将操作添加到操作队列,操作就会启动。操作队列可以控制任务的先后依赖关系,并发线程数量,启动线程,取消线程,根据优先级调度线程等等。

3.GCD(Grand Central Dispatch): 分为线性执行队列[Serial Dispatch Queue]和并发执行队列[Concurrent Dispatch Queue]。

    系统的Dispatch Queue: 主线程队列(main dispatch queue),全局并行队列(global dispatch queue)。一般不必创建新的dispatch queue,使用global dispatch queue即可。 global dispatch queue,可同步,可异步。而main dispatch queue,则只能同步。执行任务的顺序一般都是根据任务的添加顺序。一旦任务添加到queue中,便不好取消操作。


多线程的访问安全问题:

在多线程中,比较复杂的就是数据访问安全问题。

解决数据访问安全问题的方法有,加锁,原子性操作等。

互斥锁使用了线程同步的原理,互斥锁的优缺点:

优点:能够有效防止因多线程争夺数据而导致的数据安全问题。

缺点:需要消耗大量的资源。

属性:原子属性 atomic, 非原子属性 nonatomic.

atomic: 在setter方法中添加互斥锁, 线程安全,但需要消耗大量的CPU资源,默认为atomic。

nonatomic: 在setter方法中没有互斥锁,非线程安全。

http://www.cnblogs.com/wendingding/p/3805841.html


RunLoop: 顾名思义,事件循环。一个RunLoop就是一个事件处理的循环,用来调度工作和不断接收输入源。

使用RunLoop的目的就是在于让线程有工作的时候忙于工作,没有工作的时候处于休眠状态。

RunLoop 的管理并不完全是自动的。必须设计线程代码以在适当的时候启动runloop 并正确响应输入事件。每个线程都有与之对应的Runloop对象。不需自己创建,只需手动启动。

要用while或for语句来处理不断接收的事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值