网络编程 IO 模型:同步和异步

同步和异步都是消息的一种通知机制。

 

1. 同步

同步就是在发出一个功能调用时,在没有得到结果之前,该调用不返回。

例如:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。

另外,最常见的例子就是 Windows 系统消息机制中的 SendMessage 函数调用。

SendMessage 函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。只有当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者。

 

2. 异步

异步和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。

例如:当程序1调用程序2时,程序1继续执行自己的下一个动作,不受程序2的的影响。

另外,最常见的例子就是 Windows 系统消息机制中的 PostMessage 函数调用。

PostMessage 函数发送一个消息给某个窗口,发送后立即返回,至于接收的窗口如何处理消息,并不关心。

 

3. 同步和异步 IO

同步和异步的概念描述的是用户线程与内核的交互方式:

同步是指用户线程发起 IO 请求后,需要等待或者轮询,内核 IO 操作完成后才能继续执行;

异步是指用户线程发起 IO 请求后继续执行,当内核 IO 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。