2009-12-02 82 views
0

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

如果我通过ThreadPool或通过一个通用的Action <T> .BeginInvoke调用方法(在返回响应之前处理的方法),服务的句柄将继续并停留在那里直到所有请求完成,但是该服务的线程数几乎死亡。

但是,如果我在返回响应之前同步调用该方法,则线程数会增加,但处理计数将会经过极端的峰值和谷值。

这是在Windows机器上C#(服务器2008)

回答

0

你可以把手柄为指针的抽象。 Windows中有很多使用句柄的东西(当您在API级别打开文件时,您会获得文件的句柄,当您创建窗口,窗口具有句柄,线程具有句柄等时)。所以,你的处理计数可能与你的线程上发生的操作有关。如果你有更多的线程在运行,更多的东西同时发生,所以你会看到更多的句柄打开。

1

您的描述过于模糊,无法提供良好的诊断。但是ThreadPool被设计为仔细节制活动线程的数量。它将避免运行比CPU核心更多的线程。只有当线程“卡住”时,它才会安排一个额外的线程。这就解释了为什么你看到的线程数量并没有大幅增加。并且,间接地,为什么处理计数保持稳定,因为机器工作量较少。