TIdSchedulerOfThreadDefault或TIdSchedulerOfThreadPool为什么使用以及做什么

时间:2019-01-24 23:58:43

标签: delphi indy

我应该将它们与TIdTcpServer一起使用,并且它们可以在我的应用程序中改善某些地方吗?

我之所以这样问,是因为由于我使用了队列,它们也许可以提高TIdTcpServer的速度/敏捷性。

1 个答案:

答案 0 :(得分:2)

TIdTCPServer为每个连接的客户端运行一个线程。这些线程由分配给TIdScheduler属性的TIdTCPServer.Scheduler管理。如果您没有分配自己的调度程序,则会在内部为您创建默认的TIdSchedulerOfThreadDefault

TIdSchedulerOfThreadDefaultTIdSchedulerOfThreadPool之间的区别是:

  • TIdSchedulerOfThreadDefault在客户端连接时创建一个新线程,然后在客户端断开连接时终止该线程。

  • TIdSchedulerOfThreadPool维护一个空闲线程池。当客户端连接时,如果有线程可用,则将线程从池中拉出,否则将创建一个新线程。当客户端断开连接时,如果不超过调度程序的PoolSize,线程将被放回池中以供重用,否则线程将终止。

从操作系统的角度来看,创建新线程是一项昂贵的操作。因此,通常,通常首选使用线程池来获得更好的性能,但是会以闲置等待使用的空闲线程使用内存和资源为代价。

您决定使用的哪个组件不会对服务器在处理活动客户端时的性能产生太大影响,而只会影响处理套接字连接/断开连接时服务器的性能。