点点滴滴访问量:
 

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

Code


 

根据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及线程了解比较深入的同学,能给出更多的建议和指导
posted on 2008-03-14 11:46  sopper  阅读(2570)  评论(5编辑  收藏  举报