TIdSchedulerOfThreadDefault 或 TIdSchedulerOfThreadPool 为什么使用以及做什么
TIdSchedulerOfThreadDefault or TIdSchedulerOfThreadPool why use and what do
我应该将它们与 TIdTcpServer 一起使用吗?它们可以在哪些方面改进我的应用程序?
我问它是因为也许他们可以改进 TIdTcpServer 上的某些 speed/agility 操作,因为我使用队列。
TIdTCPServer
为每个连接的客户端运行一个线程。这些线程由分配给 TIdTCPServer.Scheduler
属性 的 TIdScheduler
管理。如果您不分配自己的调度程序,则会在内部为您创建一个默认值 TIdSchedulerOfThreadDefault
。
TIdSchedulerOfThreadDefault
和TIdSchedulerOfThreadPool
的区别是:
TIdSchedulerOfThreadDefault
在客户端连接时创建一个新线程,然后在客户端断开连接时终止该线程。
TIdSchedulerOfThreadPool
维护一个空闲线程池。当客户端连接时,如果一个线程可用,则从线程池中拉出一个线程,否则创建一个新线程。当客户端断开连接时,如果不会超过调度器的PoolSize
,则线程被放回池中重新使用,否则线程被终止。
从 OS 的角度来看,创建新线程是一项开销很大的操作。所以一般来说,使用线程池通常是获得更好性能的首选,但代价是使用内存和资源来等待空闲线程等待使用。
无论您决定使用哪个组件,都不会对服务器在处理活动客户端时的性能产生太大影响,只会影响它在处理套接字时的性能connects/disconnects。
我应该将它们与 TIdTcpServer 一起使用吗?它们可以在哪些方面改进我的应用程序?
我问它是因为也许他们可以改进 TIdTcpServer 上的某些 speed/agility 操作,因为我使用队列。
TIdTCPServer
为每个连接的客户端运行一个线程。这些线程由分配给 TIdTCPServer.Scheduler
属性 的 TIdScheduler
管理。如果您不分配自己的调度程序,则会在内部为您创建一个默认值 TIdSchedulerOfThreadDefault
。
TIdSchedulerOfThreadDefault
和TIdSchedulerOfThreadPool
的区别是:
TIdSchedulerOfThreadDefault
在客户端连接时创建一个新线程,然后在客户端断开连接时终止该线程。TIdSchedulerOfThreadPool
维护一个空闲线程池。当客户端连接时,如果一个线程可用,则从线程池中拉出一个线程,否则创建一个新线程。当客户端断开连接时,如果不会超过调度器的PoolSize
,则线程被放回池中重新使用,否则线程被终止。
从 OS 的角度来看,创建新线程是一项开销很大的操作。所以一般来说,使用线程池通常是获得更好性能的首选,但代价是使用内存和资源来等待空闲线程等待使用。
无论您决定使用哪个组件,都不会对服务器在处理活动客户端时的性能产生太大影响,只会影响它在处理套接字时的性能connects/disconnects。