为了账号安全,请及时绑定邮箱和手机立即绑定

什么是ThreadPool服务器的异步/等待方式?

什么是ThreadPool服务器的异步/等待方式?

C#
神不在的星期二 2019-10-19 14:28:56
我正在使用同步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操作中不必要地阻塞线程?在这种情况下,是否有惯用的方法来最大化吞吐量?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 385 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信