zoukankan      html  css  js  c++  java
  • INDY9線程池機理

    針對INDY9版本

    // 使用完的線程歸還線程池

    procedure TIdThreadMgrPool.ReleaseThread(AThread: TIdThread);

    var

      LThreadPool: TList;

    begin

      ActiveThreads.Remove(AThread);

      LThreadPool := FThreadPool.LockList;

      try

      // PoolSize = 0 means that we will keep all active threads in the thread pool

        if ((PoolSize > 0) and (LThreadPool.Count >= PoolSize)) or AThread.Terminated then begin

          if IsCurrentThread(AThread) then begin

            AThread.FreeOnTerminate := True;

            AThread.Terminate;

          end else begin

            if not AThread.Stopped then

            begin

              AThread.TerminateAndWaitFor;

            end;

            AThread.Free;

          end;

        end else begin

          if not AThread.Suspended then begin

            AThread.OnStopped := ThreadStopped;

            AThread.Stop;

          end

          else begin

            AThread.Free;

          end;

        end;

      finally FThreadPool.UnlockList; end;

    end;

     

    創建線程池的時候不會一運行就創建N個線程

     

    當一個客戶第一次建立連接,才會在池內創建一個線程,用完後掛起,直至線程數量 > poolsize,所以poolsize不要設的過大。

    poolsize=0 線程池完全不起作用

     

  • 相关阅读:
    BUUCTF-[强网杯 2019]随便注
    Oracle 存储过程
    java.lang.OutOfMemoryError: Java heap space
    Oracle 约束
    Docker 学习1 容器技术基础入门
    Kubernetes 学习1 Devops 核心要点和k8s架构概述
    mysql Sql语句
    Shell 编程详解
    git 学习
    Linux awk学习
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940768.html
Copyright © 2011-2022 走看看