GCD

作者: seven_less | 来源:发表于2024-05-06 11:03 被阅读0次

    sync: 会阻塞当前线程,不具备开启新线程的能力

    async:不会阻塞当前线程,具备开启新线程的能力(注: 具备开启线程的能力,不一定会开启新线程,如异步执行主队列的任务就不会开启新的线程)

    串行队列和并行队列,都遵循fifo(先进先出)原则,两者区别:执行顺序不同,使用的线程个数不同

    同步+串行:

    所有的任务都是在当前线程中执行的,未开启新线程。(同步执行不具备开启新线程的能力)

    任务完全按照自上至下按顺序执行(同步执行需等待当前任务执行完毕才能继续向下执行)

    同步+并发:

    所有任务都是在当前线程执行,未开启新线程(同步执行不具备开启新线程的能力)。

    任务自上至下顺序执行。(同步执行需等待当前任务执行完毕才能继续向下执行)。

    异步+串行:

    开启了新线程(异步执行具有开启线程的能力)但是不管任务有多少个,只开启一条新线程(串行队列的任务都在同一条线程执行)。

    所有的任务都是在begin和end之后执行的(异步执行不需等待任务完毕,就可继续向下执行)。

    任务是按队列中的顺序执行的(串行队列每次只有一个任务被执行,任务一个接一个执行)。

    异步+并发:

    异步执行具备开启新线程的能力,并发队列可利用多个线程,同时执行多个任务

    任务是在begin和end之后开始执行的(异步执行不需等待任务完毕,就可继续向下执行)。

    同步+主队列:

    在主线程,执行“同步+主队列”任务时,会导致死锁的发生

    “同步+主队列”任务放到其他线程(非主线程),那么并不会发生死锁

    所有的任务都将在主线程(而非当前线程)执行,且任务按序执行

    异步+主队列:

    所有的任务都是在主线程中执行的(虽然异步执行具备开启线程的能力,但因为是主队列,所以所有的任务都在主线程中)

    任务均在begin和end之后执行(异步执行不需等待任务完毕,就可继续向下执行)

    任务是按顺序执行(主队列是串行队列,每次只执行一个任务,任务一个接一个执行)

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:GCD

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