这个问题解释过很多次了,这次写下来吧。
简单点讲,同步异步是相对于线程来说的。串行和并行是相对于队列,或者说任务来说的,是任务的执行先后顺序,不关系到线程。
同步会卡死线程,异步一般是开启另一个线程来执行,开启的这个只能是子线程。异步的子线程会在后台跑起来,甚至超过了主线程的速度,但是关于刷新UI的事情需要回归主线程来做。子线程不具备刷新UI的功能。可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈。
举个生活中的例子高速公路,过收费站的时候就像是串行。开多个窗口(多核)的时候就像是并行。然后用户为了超车(假设)进入快车道(或者说匝道)行驶一段路之后还要回归主干道,这是异步。同步和串行有点像,但是是相对于线程而言的。所有的线程默认都是同步。
有关线程先后顺序依赖关系的事情最好放到队列里面去做。
注意:主线程中不能使用同步。会发生循环等待(主线程等待该线程执行完毕,该线程需要调用主线程执行)。
网友评论