任务:即操作,你想要干什么,说白了就是一段代码,在 GCD 中就是一个 Block,所以添加任务十分方便。任务有两种执行方式:同步执行和异步执行,他们之间的区别是是否会创建新的线程。
队列:用于存放任务。一共有两种队列,串行队列和并行队列。
串行队列:串行队列中的任务会根据队列的定义 FIFO 的执行,一个接一个的先进先出的进行执行。
注解:放到串行队列的任务,GCD 会FIFO(先进先出)地取出来一个,执行一个,然后取下一个,这样一个一个的执行。
并行队列:并行队列中的任务FIFO取出来会放到另一个线程去执行
注解:放到并行队列的任务,GCD 也会 FIFO的取出来,但不同的是,它取出来一个就会放到别的线程,然后再取出来一个又放到另一个的线程。这样由于取的动作很快,忽略不计,看起来,所有的任务都是一起执行的。不过需要注意,GCD 会根据系统资源控制并行的数量,所以如果任务很多,它并不会让所有任务同时执行。
同步SYNC:阻塞当前线程让任务完后该线程结束
异步ASYNC:不阻塞当前线程任务完成也线程也结束
这里说的并不准确,同步(sync)和异步(async)的主要区别在于会不会阻塞当前线程,直到Block中的任务执行完毕!
如果是同步(sync)操作,它会阻塞当前线程并等待Block中的任务执行完毕,然后当前线程才会继续往下运行。
如果是异步(async)操作,当前线程会直接往下执行,它不会阻塞当前线程。