IOS 知识点总结(一)

###IOS线程讲解

  • 对于单核的处理器,可以把多个操作放到不同的线程,当用户操作完UI之后其他后续任务在其他线程操作,当CPU空闲时继续其他操作;
  • 对于多核操作,操作任务可以分散到多个空闲的CPU中继续执行;
  • 一个核(CPU)可以有多个线程,但其实是CPU在快速的调度不同的任务,造成多线程运行的假象;
  • 每一个线程同时只能处理一件事情,其他的事情会放在队列中等待,当CPU空闲时在接着执行队列中的其他任务;
  • 每个APP的启动就是一个进程,每一个进程会有一个主线程(更新UI呈现),这个线程是其他线程的父线程;
  • 启动一个线程时,并非就一定立即执行,而是处于就绪状态,当系统CPU根据当前状态调度时才真正执行
  • 每开辟一个线程就需要占用系统的开销;

####1.线程操作的种类:

  • NSthread:

轻量级的多线程,需要开发者自己来管理线程的生命周期,由于NSthread需要开发者自动管理生命周期,一般情况下,会放到自动缓冲池中:@autoreleasepool。
当在多个线程使用时,线程顺序不可控,只能通过调整线程的优先顺序(0-1),默认的优先顺序是0.5;

  • NSOperation:

该类不能直接使用,只能使用其自类:NSInvocationOperation和NSBlockOperation以及使用NSOperationQueue这个队列中,创建好之后需要放到NSOperationQueue创建好的队列中去;
比较容易管理线程总数以及线程的顺序;
使用NSOperation进行多线程开发可以设置最大的并发数;
可以设置依赖线程,被依赖的线程会优先执行;
NSOperation是对GCD的OC封装,但是相比于GCD基于C语言开发,效率更高,所以一般建议如果任务之间有依赖关系或者想监听任务的完成是会优先选择NSoperation;

  • GCD(Grand Central Dispatch):

基于C语言封装的面向过程的线程操作;
GCD统一管理队列中的任务,队列分为串行队列和并行队列。
1.串行队列:只有一个线程,所有任务按顺序执行;
2.并发队列:有多个线程,根据核数决定任务的执行速度,同时保证队列的特性,先进先出;
3.主队列:主要用于处理UI操作;
在GCD中一个操作是多线程还是 单线程取决于当前队列的类型和执行方法,只有为并行队列并且使用异步是才能在多个线程中执行;
GCD中不需要增加@autoreleasepool,GCD会自己管理内存;
顺序的控制的话可以使用锁或者信号量操作;

  • 解决资源抢占

使用同步锁:NSlock和@Synchronized,可以再锁未打开之前不允许其他操作;
GCD引用信号量
初始化的信号量必须大于0,每发送一个通知,信号量加1,每发送一个等待信号,信号量减1,如果信号量为0则信号会处于等待状态,知道信号量大于0开始执行;

  • NSCondition:控制线程通信

NSCondition主要用于解决线程之间的调度关系,可以使用wait方法控制某个线程处于等待状态,知道其他线程调用signal(唤醒一个线程,如果有多个则唤醒任意一个)或者broadcast(此方法会唤醒所有的等待线程),方法唤醒该线程才能继续;
1.GCD的任务:
同步:在当前线程中依次执行任务;
异步:新开线程在新线程中执行任务;
2.GCD队列:
串行队列:让任务有序的执行,同时只能调度一个任务执行;
并行队列:可以让多个任务并发、同时执行,可以同时调度多个任务执行;

  • 总结
    1.线程安全问题:资源共享造成的安全问题,多个线程同时操作共享资源,会造成数据的错乱,在这种情况下一般会选择采用锁机制来处理该问题;
    2.线程同步:使多个线程一次有序的执行,就是上面的加锁机制,把共享资源的读写操作锁起来常用的是互斥锁;
    3.线程间的同步:一个线程执行完任务之后,把执行的结果传递到另外一个线程,叫线程间通信。这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值