#异步模型
#异步和同步
>同步,就是在发出一个功能调用时,在没有得到结果前,调用不返回
>异步,当一个异步过程调用发出后,调用者不能立即得到调用结果,而是通过状态,通知和回调来通知调用者。
>通过检查状态来判断异步调用结果,效率会很低,因为需要周期性检查状态
>回调函数和通知差不多
#同步调用与阻塞调用
>对于同步调用来说,当前线程还是激活状态的。例如CSocket中调用Receive函数,当缓冲区没有数据时,虽然函数一直在等待而没有返回,但同时线程仍然能继续处理各种消息。
>对于阻塞调用来说,当前线程会被挂起。例如 revc函数,当socket工作在阻塞模式的时候,如果在缓冲区没有数据的情况下调用该函数,那么线程将会被挂起,直到有数据为止。
#非阻塞
非阻塞,在不能得到结果前,函数不会阻塞当前线程,而是立即返回。
>对象是否处于阻塞模式和函数是不是阻塞调用有很强的想关心,但并不是一一对应
>阻塞对象可以有非阻塞的调用方式,可以通过API轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。
>对于非阻塞对象,特殊调用也可以进入阻塞调用,例如select
>CSocket::Receive 函数(同步)
>recv (阻塞)