首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ThreadPool服务器中有类似于异步/等待的命令吗?

ThreadPool服务器中有类似于异步/等待的命令吗?

提问于 2018-02-11 23:57:17
回答 2关注 0查看 399

我正在使用同步API和线程池开发一个类似于此的TCP服务器:

TcpListener listener;
void Serve(){
  while(true){
    var client = listener.AcceptTcpClient();
    ThreadPool.QueueUserWorkItem(this.HandleConnection, client);
    //Or alternatively new Thread(HandleConnection).Start(client)
  }
}

假设我的目标是以最低的资源使用率处理尽可能多的并发连接,这似乎很快就会受到可用线程数量的限制。我怀疑通过使用非阻塞的任务API,我将能够用更少的资源处理更多的问题。

我的办法:

async Task Serve(){
  while(true){
    var client = await listener.AcceptTcpClientAsync();
    HandleConnectionAsync(client); //fire and forget?
  }
}

但我觉得这可能会造成瓶颈。也许HandleConnectionAsync将花费非常长的时间来完成第一个等待,并将停止主接受循环的进行。这将只使用一个线程,还是运行时会在它认为合适的多个线程运行?

是否有一种方法可以将这两种方法结合起来,以便我的服务器能够准确地使用它所需的线程数量来满足正在运行的任务的数量,但是这样它就不会不必要地阻止IO操作中的线程了?

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档