美文网首页iOS之道
多线程(一)

多线程(一)

作者: 没戏还在演戏 | 来源:发表于2019-12-24 15:10 被阅读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

    相关文章

      网友评论

        本文标题:多线程(一)

        本文链接:https://www.haomeiwen.com/subject/bcybnctx.html