zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    wget(转)
    852. Peak Index in a Mountain Array
    617. Merge Two Binary Trees
    814. Binary Tree Pruning
    657. Judge Route Circle
    861. Score After Flipping Matrix
    832. Flipping an Image
    461. Hamming Distance
    654. Maximum Binary Tree
    804. Unique Morse Code Words
  • 原文地址:https://www.cnblogs.com/TDou/p/6122641.html
Copyright © 2011-2022 走看看