• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

异步socket的线程分配(C#)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 

    以下是MSDN里异步socket示例的代码,我在代码里加入了显示当前线程ID的语句,想看看异步socket的线程是怎么分配的,与客户端配合运行后的结果如图



 

根据MSDN的原话:

异步套接字使用系统线程池中的线程处理传入的连接。

一个线程负责接受连接,

另一线程用于处理每个传入的连接,

还有一个线程负责接收连接数据。

这些线程可以是同一个线程,具体取决于线程池所分配的线程。”

个人理解:根据MSDN对异步socket连接、接受、发送等线程分配的解释,以及上面代码的注释和演示,我们在做异步socket编程时,不用对socket这组线程做任何处理,只要处理好主线程及其它线程与socket这周线程的关系就可。


 

补充main方法和AcceptCallback方法里分别加入
bool threadBool = Thread.CurrentThread.IsBackground;
Console.WriteLine(threadBool.ToString());
这两条语句,则会发现main方法里线程的IsBackground属性为falseAcceptCallback方法里线程的IsBackground属性为TrueMSDN里说:“托管线程池中的线程为后台线程,即它们的 IsBackground 属性为 true”;再根据上面引用的MSDN的原文“这些线程可以是同一个线程,具体取决于线程池所分配的线程。”的这一句可知,此线程就是由线程池所分配的,也许有人会认为此补充为多此一举,但是我最初对于这几个线程的出现,以及MSDN的解释没有很好的理解,所以出现了这个补充,现在好了,我知道了这几个隐藏的线程出自那里了,呵呵,你呢?

再次补充:
//如果要查看线程是否属于托管线程池,可使用
   bool poolThread = Thread.CurrentThread.IsThreadPoolThread;//指示线程是否属于托管线程池

希望对异步
socket及线程了解比较深入的同学,能给出更多的建议和指导

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# Access2003/2007 连接字符串总结发布时间:2022-07-10
下一篇:
C#开源项目列表发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap