美文网首页
Swift队列和线程的搭配执行

Swift队列和线程的搭配执行

作者: 种提莫的蘑菇 | 来源:发表于2021-03-01 13:48 被阅读0次

    队列分为 串行队列,并行队列,特殊的主队列
    线程分为 同步线程,异步线程

    搭配结果一共6种
    情况1:主队列,同步线程。结果:死锁
    情况2:主队列,异步线程。结果:主线顺序执行,异步实现最后执行,在主线程中
    情况3:串行队列,同步线程。结果:顺序执行,在主线程中
    情况4:并行队列,同步线程。结果:顺序执行,在主线程中
    情况5:串行队列,异步线程。结果:并发执行。不在主线程
    情况6:并行队列,异步线程。结果:并发执行。不在主线程
    总结一句话就是
    除了主队列以外的所有异步执行都会新建线程。并发执行。
    由于主队列是专门负责调度主线程度的任务,不能开辟新的线程。所以,在主队列下的任务不管是异步任务还是同步任务都不会开辟线程,任务只会在主线程顺序执行。

    具体的验证代码如下,进行不同的注释切换即可

    func threadFunc() {
            print("任务--> 1")
            // 依次是:主队列,并行队列,串行队列
            let queue = DispatchQueue.main
    //        let queue = DispatchQueue(label: "label", attributes: .concurrent)
    //        let queue = DispatchQueue(label: "label")
            for index in 0..<10 {
                // 同步异步的切换
    //            queue.sync {
                queue.async {
                    if Thread.current == Thread.main {
                        print("是主线程")
                    }else {
                        print("不是主线程")
                    }
                    print("队列中的任务---> \(index)")
                }
            }
            print("任务---> 2")
        }
    

    另外说一下主队列,同步执行死锁的原因:
    因为代码任务需要马上执行,但是主线程正在执行代码任务的方法体,因此代码任务就必须等待,而主线程又在等待代码任务的完成好去完成下面的任务,因此就形成了相互等待,造成了死锁

    相关文章

      网友评论

          本文标题:Swift队列和线程的搭配执行

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