线程池

 TIdThreadMgrDefault,Indy 中默认的线程管理是很简单和基础的。每次需要个线程的时候,就会创建个。当线程不 再需要的时候,它就被摧毁。

一般地,默认线程管理是合适的。但是对于那些服务短生命周期的链接的服务器,服务每个 请求的线程的创建和销毁过程的时间对比于服务请求的时间是无法忽略的。这像这种情况下, 应该使用个线程池。
使用线程池,线程们会被回收利用和预分配。在一个线程池中,线程在需要它们之前就被创 建好了并且在池中保持非激活状态。当需要线程的时候,就会从池子中取出一个并且激活它。 如果需要比池子中创建好的线程还多的线程,就会创建更多的线程。当个线程不再被需要时, 它不会被销毁,而是被使无效并被丢入池子中,于是它可以在之后被需要的时候重用。

对于服务短生命周期(short-lived) 链接的服务器特别的明显。这样的服务器创建个线程后很简短的使用它然后就摧毁了它。这 导致非常高频率的线程创建和销毁。这样的服务器的例子比如时间服务器甚至网页服务器。 一个单请求被发送,然后返回一个简单的答复。当使用个浏览器去浏览个网页站点时,服务 器上可能会发生成千上万的连接和断连。
线程池可以缓解这种状况。取代根据命令而创建和摧毁线程,线程被从个非激活但是已经创 建的列表(池子)中借用过来。当个线程不再被需要,它被丢回了池子中而不是被销毁掉。当 线程在池子中时,他们被标记为非激活的,因此也不消耗 CPU 周期。为了更加提升性能, 池子的大小可以被动态地调整以满足系统当前的需要。
Indy 的确支持线程池。在 Indy 中,线程池可以通过使用 TIdThreadMgrPool 控件来获得。

原文地址:https://www.cnblogs.com/hnxxcxg/p/5567321.html