码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-12-01 17:17:58      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:method   begin   功能   调用   system   get   完全   概念   缺省   

但是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

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

标签:method   begin   功能   调用   system   get   完全   概念   缺省   

原文地址:http://www.cnblogs.com/GJM6/p/6122641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!