iOS之道

多线程(一)

2019-12-24  本文已影响0人  没戏还在演戏

1.进程

  • 一个APP应用就是一个进程
  • iOS是单进程,安卓可以多进程
  • 一个进程内可以有多个线程

2.多线程

优点:

  • 能适当提高程序的执行效率
  • 能适当提高资源利用率(CPU,内存)
  • 线程上的任务执行完成后,线程会自动销毁

缺点:

  • 开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)
  • 如果开启大量的线程,会占用大量的内存空间,降低程序的性能
  • 线程越多,CPU在调用线程上的开销就越大
  • 程序设计更加复杂,比如线程间的通信、多线程的数据共享

3.线程的生命周期

线程的生命周期.png
就绪 -> 运行
运行 -> 就绪
线程之间的切换
多核就是并发
线程不能start 两次

4. 锁

锁性能图.png
推荐使用NSLock
偷懒用@synchronized 美滋滋
  • 自旋锁
    一个完成 下一个直接进去
  • 互斥锁
    如果发现前面有线程在执行,就休眠

5.栅栏函数

他能够保证顺序执行,并保证线程安全
注意点:

  1. 栅栏函数一定要是自定义的并发队列,不能使用dispatch_get_global_queue(全局并发队列)
  2. 必须要求都在一个自定义队列里
  3. 不利于封装

dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //AFN自有队列 -- @"com.almofire.cn.session"
        [self.manager request1];
    });
 //AFN内有自己的队列 所以这里栅栏函数无效
dispatch_barrier_async(dispatch_get_global_queue(0, 0), ^{

});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
     [self.manager request2];
});

6.队列图

队列图.png
上一篇下一篇

猜你喜欢

热点阅读