zoukankan      html  css  js  c++  java
  • 线程池

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

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

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

  • 相关阅读:
    sysbench压测Oracle
    linux使用FIO测试磁盘的iops
    oracle 列授权相关测试
    11G、12C安装结束需要做的一些操作
    Oracle 12C R2 on Linux 7.X 单实例静默安装文档
    auto_create_partition
    关于使用索引的一些经验
    转:【Python3网络爬虫开发实战】 requests基本用法
    转:http协议学习系列(响应头---Response Headers)
    关于建立老猿Python研学群的公告
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5567321.html
Copyright © 2011-2022 走看看