• 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的异步通信程序了。由于程序有界面还有数据通信,并且通信获得的数据要显示在界面上,所以应该选用回调机制来实现,它需要多线程、委托、异步调用等概念。

    原文:https://blog.csdn.net/yuyin86/article/details/7765882

  • 相关阅读:
    nginx学习(十):nginx搭建2台tomcat集群
    IOT设备SmartConfig实现
    AIDL原理分析
    MySQL升级-CentOS6.8
    CentOS更新yum源
    .net core微服务通信——gRPC(下)
    .net core微服务通信——gRPC(上)
    实时web应用方案——SignalR(.net core)
    redis常见Bug及雪崩、穿透、击穿解析
    asp.net core托管到windows服务
  • 原文地址:https://www.cnblogs.com/jiangyu0331/p/12000724.html
Copyright © 2020-2023  润新知