logo头像
Snippet 博客主题

多线程概念解释

串行并行,同步异步解释

串行队列,并行队列

同步任务,异步任务:
同步任务不能开辟新线程,一个一个执行
异步任务开辟新线程,一个没结束就可以执行下一个

合理的情况:
串行异步 不阻塞当前线程(主线程),另外开辟一个线程一个一个执行
并行异步 也不阻塞当前线程(主线程),开辟多个线程,一起执行

不合理:(同步都是阻塞当前线程)
并行同步 没意义,同串行同步,都是在主线程一个一个执行
串行同步 阻塞当前线程,一个一个执行,在其中再执行同步任务,会死锁

开辟多线程的情况:
并行+异步 = 多条线程
自定义串行+异步 = 一条新线程
其余情况都在当前线程/主线程执行

队列组DispatchGroup

  • 可以将一些任务加入到Group中,group中的任务全部执行完毕后,发送一个通知.
  • 组中的任务可以追加,只要任务没有全部完成,监听就不会被调用.

信号量

信号量为0会阻塞线程,大于0不会阻塞线程.通过改变信号量的值,控制线程是否阻塞,达到线程同步的目的.应用如下:

  1. 异步转同步
    对异步耗时结果进行额外的操作,通过信号量来等待异步执行结果
  2. 线程安全(锁)
    多个线程操作同一个数据,dispatch_once内部使用了信号量,确保同一时间只有一个block在执行.
  3. 控制并发数

栅栏函数

阻塞队列中栅栏之前的任务.同步栅栏,阻塞当前线程.异步栅栏不阻塞当前线程.