跳至主要內容

什么是异步和同步

Mr.Lexon大约 2 分钟networking

什么是异步和同步

我最早听到异步这个东西,是在写js获取api数据的时候,做完那个工作的时候,我知道了异步和同步的区别: 同步: 在一个进程内,有一部分的上下文在执行多个操作,在这里,这些操作必须完成之后才能执行下一步的操作,这种线性执行的模式就叫同步。 异步: 与同步相反,异步就是这部分的上下文中,有一个或多个操作,在执行这些操作时,将该操作建立起来之后就执行下一个操作,那么这个操作就叫异步。 以js为例子:

function asyncFunc(){ 
	setTimeout(logsomething, 3000)
	console.log("这是第二步") 
}
function logsomething(){ 
	console.log("这是第一步") 
}
asyncFunc()

此时执行asyncFunc函数会发现,第一步比第二步要后出现,在这里可以得出setTimeout(logsomething, 3000)是异步操作,因为进程并没有等待这一步完成之后才执行后面的操作。在实践中如果就要让他执行完成之后才可以执行下一步,怎么办?那就要引入阻塞概念:调用结果返回之前,当前进程会被挂起。调用线程只有在得到结果之后才会返回。就是让进程等待执行结果,在执行结果得到之前不得执行下一步。 阻塞本身会带来一个问题:即所有的操作停止,就等这个任务完成才可以执行,带来的异常就是程序在使用过程中经常死机,并在一定情况下崩溃,所以需要阻塞的情况下,必须新开线程隔离主进程工作。 但是不是所有的异步工作都是需要阻塞的操作的,阻塞前提是下一步操作需要上一步操作的结果或状态,否则,只需要将其执行就好而不需要阻塞进程或线程了,有一点需要注意,为了在测试过程中给自己好的体验,尽可能减少异步操作,无论是否需要阻塞的异步操作,都需要将其线程化以便排错。

上次编辑于:
贡献者: Lexon