IOS 同步异步、串行并行的区别

简介:

同步异步是相对于线程来说的。  串行和并行是相对于队列,或者说任务来说的,是任务的执行先后顺序,不关系到线程。

串行:一个任务执行完毕后,再执行下一个任务

并行:多个任务同时执行

同步:顾名思义即为一步一步执行线程内的东西。

异步:不阻塞当前线程操作,等同于后台跑数据。

异步 + 并行:系统会为每个任务开创一个新的线程执行。

异步 + 串行:队列数决定了线程数。

同步 + 串行:不开辟新的线程。 

同步 + 并行: 不开辟新的线程。


关于队列开启线程数:

假如有2个并行队列,每个分别有2个异步线程。此时会开启4条线程。

假如有2个串行队列,每个分别有2个异步线程。此时会开启2条线程。

因为并行队列为了保证快速响应,会开启多个线程。

串行队列,每个队列只会开启一个线程,里面有多少任务都只开启一个。

异步是指线程的异步。通常异步操作都是开启另一个线程来执行,开启的这个只能是子线程。也有在主线程执行异步的时候。异步的子线程会在后台跑起来,甚至超过了主线程的速度。

举例:

举个生活中的例子高速公路,过收费站的时候排队刷卡这件事本身就像是串行。开多个窗口收费的时候就像是并行。然后用户为了超车进入快车道行驶一段路之后再回归主干道,这是异步。同步和串行有点像,但是是相对于线程而言的。所有的线程默认都是同步。

注意:

1、主线程中不能使用同步。会发生循环等待。主线程和主队列的相互等待。主线程内的东西需要加入到队列执行,而主队列在等待主线程执行完毕再继续执行。因此死循环,且主线程内代码不会执行。

2、关于刷新UI的事情需要回归主线程来做。子线程不具备刷新UI的功能。可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈。


推荐阅读更多精彩内容