美文网首页
多线程探索一-概念

多线程探索一-概念

作者: 我只是个仙 | 来源:发表于2021-08-21 16:43 被阅读0次

    本文属于多线程系列:
    多线程探索一-概念
    多线程探索二-GCD
    多线程探索三-NSOperation
    多线程探索四-锁

    进程

    进程是系统资源分配和调度的独立单元
    进程是处于运行中的程序,是系统资源分配和调度的独立单位。
    iOS中一个app就是一个单独的进程,进程之间通常是不允许互相访问的。
    进程之间相互独立,一个进程崩溃不会影响其他进程。
    进程切换,消耗资源,效率低
    

    线程

    线程是处理器调度的基本单元
    线程是进程的基本执行单元,进程至少拥有一个线程即主线程。
    一个进程可以拥有多个线程,线程之间可以共享当前进程下的所有数据资源和地址空间。
    线程之间是独立运行的,一个线程是不知道其他线程的存在的。
    一个线程崩溃则整个进程都死掉了。
    线程切换代价小,效率高
    

    任务和队列

    任务就是执行代码, 执行任务分为两种 同步 和 异步,下面会讲到。
    队列就是任务的等待队列,队列的特点是FIFO(先进先出),队列也分为两种 串行队列和并发队列 接下来会讲。
    任务是你要执行的代码,队列是指按照FIFO原则存放你要执行的任务,而真正执行是靠线程来执行的。而所有的这些资源调度是靠进程来完成的。
    

    同步和异步

    这里同步和异步描述的是任务的执行方式:
    同步任务:添加到队列的任务,要执行的任务会一直等到前面的任务执行完毕之后才开始,不具备开启新线程的能力,一般在当前线程中执行
    异步任务:添加到队列的任务,不需要等待前面的任务,加入之后就可以开辟新的线程去执行当前任务。有开启新线程的能力,但是不一定会开启。
    

    串行和并发

    串行队列: 只会开启一个线程,每次只能执行一个任务。
    并发队列: 可以开启多条线程,可以同时执行多个任务
    iOS默认有两种队列:
    - 主队列-串行队列
    - 全局队列-并发队列
    同步任务需要放在串行队列中才有效
    异步任务配合并发队列才有效
    

    iOS多线程对比

    这里借用网上的两张图  
    
    截屏2021-08-21 下午4.41.19.png

    什么是死锁

    GCD: 在一个串行队列的任务中,再向这个队列同步添加任务。
    
    如下例子:
    
        - (void)viewDidLoad {
            [super viewDidLoad];
            NSLog(@"2");
            dispatch_sync(dispatch_get_main_queue(), ^{
                NSLog(@"串行队列中的同步任务");
            });
            NSLog(@"2");
        }
    

    欢迎访问我的博客 传送门

    参考文档:

    iOS多线程实现方案对比

    相关文章

      网友评论

          本文标题:多线程探索一-概念

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