sock编程技术


sock编程技术
2010年08月09日
  同步,阻塞,异步,非阻塞异同
  所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回;
  异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到结果,实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以 CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用 Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行,当连接真正建立起来以后,socket底层会发送一个消息通知该对象。
  阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回。阻塞调用和同步调用是不同的,同步调用,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用该函数,否则主界面还是可以刷新。
  非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

猜你喜欢

转载自yns74yns.iteye.com/blog/1363410