异步与手动创建线程

本文关键字:创建 线程 异步 | 更新日期: 2023-09-27 18:09:15

我实现了HttpListener来处理请求。

现在我不确定是否使用异步实现更好。

我的类似于这样:

while (this.httpListener.IsListening)
{
    processRequest(this.httpListener.GetContext());
}
void processRequest(HttpListenerContext context)
{
    ...
    ThreadPool.QueueUserWorkItem(....
    ...
}

所以简而言之,我首先在单个线程中处理所有请求,然后使用ThreadPool将它们分开。

与Async-Implementation相比,有什么缺点吗?

异步与手动创建线程

需要意识到的一件重要的事情是使用async并不会创建一个新线程。当然,您正在调用的函数可能会这样做,但单独async不会。

对于IO,许多Microsoft实现的异步方法在某些时候使用IO完成端口。这意味着它们从操作系统管理的单个专用线程中被回调,而不必创建一个新线程来等待一些IO。

这是一种更好的方法,特别是对于可能有大量传入请求的服务器。每个线程都有巨大的开销。

因此,我建议您尽可能使用async实现