繁体   English   中英

句柄与线程有何关系?

[英]How does a Handle relate to a thread?

句柄与线程的关系如何? 我正在编写一个接受HTTP请求并在返回响应之前调用方法的服务。 我编写了一个测试客户端,该客户端发出10,000个HTTP请求(使用信号量来确保一次仅发出1000个请求)。

如果我通过ThreadPool或通用Action <T> .BeginInvoke调用该方法(返回响应之前处理的方法),则该服务的句柄将一直上升并保持在那里,直到所有请求都已完成,但线程数的服务几乎死了。

但是,如果我在返回响应之前同步调用该方法,则线程数会增加,但是句柄数将经历极端的高峰和低谷。

这是Windows计算机上的C#(Server 2008)

您的描述太含糊,无法给出良好的诊断。 但是ThreadPool旨在谨慎地限制活动线程的数量。 这样可以避免运行的线程数超过CPU内核数。 仅当线程“卡住”时,它才会调度额外的线程。 这就解释了为什么您看到线程数量没有急剧增加的原因。 间接地,为什么由于机器工作量少而使手柄数保持稳定。

您可以将句柄视为指针的抽象。 Windows中有很多使用句柄的东西(当您在API级别打开文件时,会获得文件的句柄,当您创建窗口时,窗口具有句柄,线程具有句柄等)。 因此,您的句柄数可能与线程上发生的操作有关。 如果您有更多的线程在运行,那么更多的事情将在同一时间进行,因此您将看到更多的句柄打开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM