• GJM :C#开发 异步处理是目的,多线程是手段


    但是BeginAccept和EndAccept不就是system.net.socket封装好的异步socket吗
    如果用多线程来实现的话那就不叫异步了吧
    1、再次强调,异步是目的,多线程是手段。

    所谓异步是和同步的概念相对的。所谓同步,即“发出一个功能调用时,在没有得到结果之前,该调用就不返回。”也就是必须一件一件事做,等前一件做完了才能做下一件事。异步则与之相反。

    为了异步,可以通过多种方式来实现,多线程就是其中一种方式。但是要注意的是,异步可以通过多线程来实现,但用了多线程的不一定就是异步。就好为了实现“解渴”这种目的,可以用“喝水”这种手段;但用了“喝水”这种手段,其目的不一定是为了“解渴”,也可能是“吃咸了解咸”、“漱口”等等。

    所以“如果用多线程来实现的话那就不叫异步了”的说法是完全错误的。

    2、BeginAccept 就是一种 AsyncCallback Method(委托回调方法),Socket 类提供的回调方法本身就用到了 ThreadPool 类,所以 BeginAccept 本质上就是一种多线程。这种方法的缺点是不能管理线程,缺省的最大并发数只有 25,而且回调写的不好主线程很容易阻塞。

    3、比较好的方法是自己写线程池来管理线程用 socket.Accept 实现。

    [Reference]
    http://blog.csdn.net/awinye/article/details/537264
    http://blog.csdn.net/kingfox/article/details/7233350
  • 相关阅读:
    danci8
    禁止选择文本
    danci6
    danci5
    java 学习编译
    自动代码模板文件
    java 学习5 .io
    java 学习4 callback 回调 和泛型
    java 学习3。集合
    java 学习3。类 和 继承
  • 原文地址:https://www.cnblogs.com/TDou/p/6122641.html
Copyright © 2020-2023  润新知