大中央车站0611

同步与异步:

同步函数仅在完成其订购的任务后才返回。

另一方面,异步函数立即返回,命令任务完成但不等待它。 因此,异步功能不会阻止当前执行线程继续进行下一个功能。

并发与发与并行

多核设备通过并行并行计算同时执行多个线程; 但是,为了使单核设备实现此目的,它们必须运行一个线程,执行上下文切换,然后运行另一个线程或进程。 这通常足够快地发生,从而给人以并行执行的错觉,如下图所示

串行队列:

串行队列中的任务一次执行一个,每个任务仅在前一个任务完成后才开始。 同样,您也不知道一个任务结束到下一个任务开始之间的时间。 这些任务的执行时间在GCD的控制下; 您唯一要知道的是,GCD一次只能执行一个任务,并且会按照添加到队列中的顺序执行任务。

并发队列:

确保并发队列中的任务以添加顺序开始。 项目可以按任何顺序完成,并且您不知道下一个任务开始所花费的时间,也不知道在任何给定时间正在运行的任务数。 这完全取决于GCD。 何时开始任务的决定完全取决于GCD。 如果一个任务的执行时间与另一个任务的执行时间重叠,则由GCD决定它是否应该在另一个内核上运行(如果有一个内核可用),或者执行上下文切换到另一个任务。

主队列,串行队列,一次执行一个任务。

但是,可以保证所有任务都将在主线程上执行,这是唯一允许更新UI的线程。 此队列是用于将消息发送到UIView对象或发布通知的队列。

串行执行的任务总是一次执行一次。 同时执行的任务可能会同时执行。

闭包是可以存储和传递的自包含,可调用的代码块。 调用它们时,它们的行为类似于函数,并且可以具有参数和返回值。 另外,闭包从其自己的作用域之外“捕获”它使用的变量-也就是说,它从封闭的作用域中看到变量并记住它们的值。