进程同步与异步
同步:
过程的执行有一定的顺序,也就是说必须一步一步执行。举个例子,在socket中,服务器accept()等待客户端的连接,这里的等待实际上就是阻塞了,在客户端连接之前,该过程不会往下执行。
在同步阻塞中,应用程序执行到需要IO操作,会执行一个系统调用,然后讲控制权交给内核,此时应用程序便发生的堵塞。内核得到控制权后,开始执行这个系统调用,执行完毕后会向应用程序返回响应,应用程序得到响应后,就不再阻塞,往下执行。
进程的同步也可以设置非阻塞模型,也就是在执行一个系统调用时,内核立即返回响应,但这个响应并不代表IO操作成功,知识为了让应用程序往下执行,想知道IO操作是否成功还需要应用程序自己去访问内核。
异步:
异步通信是指,应用程序在需要IO操作时,会执行一个系统调用,但是它并不等待内核返回响应,就直接往下执行了。注意异步与同步非阻塞模型的差别,异步是不等待内核返回响应;而同步非阻塞是有等待内核返回响应的,只不过该响应不代表IO操作成功。
总结:
同步:在需要IO操作时,等待系统响应
异步:在需要IO操作时,不等待系统响应