异步与手动创建线程
本文关键字:创建 线程 异步 | 更新日期: 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
实现