基于tcp开发—异步机制

前面关于socket的编程,全部是基于同步机制开发的服务器和客户端,线程会进入阻塞或者挂起状态,降低线程利用率,同时程序影响效率。因此,向tcp程序引入异步回调:在异步套接字完成网络操作后,线程没有被阻塞或者挂起,接着通过调用回调函数处理后续网络操作。而主线程继续执行,以实现并行执行的结果。

 

为什么要引入异步机制?

看到过一个解释。当我们打开一个程序时,鼠标不停地转但是就是不见界面跳转,这是其他耗时操作阻碍了ui线程,造成ui线程不能响应用户操作。如果引用异步机制,ui线程在发起耗时操作之后马上回来响应用户操作,把能响应的都给用户,最后等耗时操作结束,通过回调来处理耗时操作的结果。这就是异步机制能快速响应用户界面,还有更高的伸缩性(线程池更加灵活分配利用数量有限的线程)

 

什么是回调函数?为什么要用回调函数?

简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调常常是异步调用的基础,即回调用于通知机制。具体看http://www.cnblogs.com/swordzj/archive/2007/04/24/2034769.html。委托就是C++的函数指针,即回调机制;就是Java的监听器:所有提供功能待植入的机制都要用到它。

 

异步回调代码例子如下:

sever.BeginAccept(new AsyncCallBack(Accept),server);//server是一个Socket对象

void Accept(IAsyncResult iar)

{

   Socket oldserver=(Socket)iar.AsycState;

   service=oldserver.EndAccept(iar);

}

从代码看出,其实异步回调就是把回调函数Accept的函数地址以及函数要用到的信息的对象通知给BeginAccept,告诉BeginAccept当你执行结束的时候只要有这两样东西给我,你就能委托系统就能用我(Accept),而异步就体现在BeginAccept和委托函数AsyncCallBack

 

有了前面的基础概念,就可以开始开发基于tcp的异步通信程序了。由于程序有界面还有数据通信,并且通信获得的数据要显示在界面上,所以应该选用回调机制来实现,它需要多线程、委托、异步调用等概念。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值