惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
W
WeLiveSecurity
P
Proofpoint News Feed
月光博客
月光博客
NISL@THU
NISL@THU
L
LINUX DO - 最新话题
Webroot Blog
Webroot Blog
T
Threatpost
Y
Y Combinator Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Threat Research - Cisco Blogs
Vercel News
Vercel News
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
MyScale Blog
MyScale Blog
N
News and Events Feed by Topic
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
Schneier on Security
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
Recent Announcements
Recent Announcements
S
Security @ Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Securelist
T
The Exploit Database - CXSecurity.com
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
雷峰网
雷峰网
量子位
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
I
Intezer
T
The Blog of Author Tim Ferriss
G
GRAHAM CLULEY
D
DataBreaches.Net
V
Vulnerabilities – Threatpost
P
Privacy & Cybersecurity Law Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
罗磊的独立博客

博客园 - sopper

Visual Assist X设置 转 mac入门系列教程之二–-Mac与众不同(4) 转 mac入门系列教程之二–-Mac与众不同(3) 转 mac入门系列教程之二–-Mac与众不同(2) 转 mac入门系列教程之二–Mac与众不同(1) 转 C++带有指针数组的结构体转换为C#可用的结构体 C#调用C++版本dll时的类型转换要注意的问题 小技巧 瑞星版本20.49.30的Bug C++控件的数据交换和数据校验 VC6类向导对窗体按钮添加的消息映射代码 c/c++下常见的内存错误及其对策 CORBA_TAO的环境配置 - sopper - 博客园 再议ManualResetEvent 你知道main函数参数的用处吗? - sopper - 博客园 你能确定这段代码的输出结果吗? 小技巧避免项目中的大隐患 提给dudu的一个小建议 vc6使用点滴积累
异步socket的线程分配(C#)
sopper · 2008-03-14 · via 博客园 - sopper
 

    以下是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及线程了解比较深入的同学,能给出更多的建议和指导