每次郵件在通道中形成佇列時,工作控制器均可確保有一項傳送郵件的工作正在執行。這可能涉及到啟動新的工作程序、新增執行緒或只指明工作已在執行中。但是,單一服務工作可能不足以確保及時遞送所有的郵件。(如需有關工作控制器概念和配置的詳細資訊,請參閱工作控制器檔案、通道執行工作的處理儲存區和工作控制器。
對於任何給定的安裝都會啟動合理的最大數量的程序與執行緒以遞送郵件。此最大數量取決於幾個因素,例如處理器的數量、磁碟的速度和連線的特徵。在 MTA 配置中,可以控制以下內容:
為執行給定通道而啟動的程序之最大數目 (maxjobs 通道關鍵字)
新執行緒或程序啟動之前,接收到的已形成佇列的郵件之數量 (threaddepth 通道關鍵字)
為執行給定通道而啟動的程序之最大數目,是對通道設定的 maxjobs 和通道執行時為所在的池設定的 JOB_LIMIT 之最小值。
假定有一封郵件需要處理。通常,工作控制器會啟動新的程序詳情如下:
如果沒有為通道執行的程序,並且尚未達到儲存區工作限制,則工作控制器會啟動新的程序。
如果通道程式是單執行緒或已達到執行緒限制,而儲存區增加量超過了執行緒的一倍 (透過 threaddepth 指定),且通道與池工作限制均未達到,則工作控制器會啟動新的程序。
如果通道程式是多重執行緒並且尚未達到執行緒限制,而郵件的儲存區增加量超過了 threaddepth 的一倍,則會啟動新的執行緒。
尤其對於 SMTP 通道,新的執行緒或程序會在不同主機的郵件形成佇列時啟動。因此,對於 SMTP 通道,工作控制器會啟動新的程序,詳情如下。假定有一封郵件需要處理:
如果沒有為 SMTP 通道執行的程序,並且尚未達到儲存區限制,則工作控制器會啟動新的程序。
如果已達到執行緒限制 (MAX_CLIENT_THREADS),某個尚未獲得服務的主機之郵件將會形成佇列,且通道 (maxjobs) 和池工作限制 (JOB_LIMIT) 均尚未達到,則將啟動新的程序。
如果尚未達到執行緒限制,某個尚未獲得服務的主機之郵件已形成佇列,則會啟動新的執行緒。
如果尚未達到執行緒限制,而郵件已形成佇列,使相應主機的郵件儲存區增加量超過 threaddepth 的一倍,則會啟動新的執行緒。
請參閱SMTP 通道執行緒。
filesperjob 關鍵字可用於使 MTA 建立其他服務工作。此關鍵字接受單一正整數參數,指定在處理佇列項目 (即檔案) 的多個服務工作建立之前,有多少個佇列項目必須傳送至關聯的通道。如果此值小於或等於零,則表示佇列只請求一個服務工作。不指定關鍵字就相當於指定零值。此關鍵字的效果已經最大化;較大的估算數量將是實際建立的服務工作數量。
filesperjob 關鍵字會以實際佇列項目或檔案的數目除以給定值。請注意,給定郵件所產生的佇列項目之數目由多個因素所控制,包括但不僅限於 single 和 single_sys 關鍵字的使用,以及郵件收信人清單中標頭修改動作的規格。
maxjobs 關鍵字對可並行執行的服務工作之總數設定了一個上限。此關鍵字之後必須加整數值;即使服務工作的估算數目大於此值,實際上仍只會建立 maxjobs 數目的工作。如果未指定 maxjobs,則此值預設為 100。通常,maxjobs 的設定值應小於或等於通道使用的任何服務池中可同時執行的工作之總數。