第二十章 進程管理
所有 IRIS
程序和應用程序都由進程運行。進程由系統生成的整數進程 ID
(稱爲 pid
)標識。
進程可以是前臺(交互式)進程,也可以是後臺(非交互式)進程。使用 JOB
命令在 ObjectScript
中啓動後臺進程。發出 JOB
命令的進程稱爲父進程,啓動的後臺進程稱爲子進程。後臺進程也可以稱爲“作業進程”或“派生進程”。
進程使用鎖持有和釋放共享資源。在 ObjectScript
中,進程使用 LOCK
命令獲取和釋放鎖。
本章描述進程批處理模式和進程優先級。
注意: IRIS
爲進程管理的各個方面提供最佳默認值。應謹慎更改這些進程默認值,並且僅適用於特定的特殊情況。
批處理模式
進程在默認模式(有時稱爲交互模式,與用戶交互無關)或批處理模式下執行。只有在沒有更好工具的特殊情況下,才應使用批處理模式。
可以將訪問數據庫大部分的進程設置爲批處理模式進程,以限制其對系統上運行的其他(非批處理)進程的影響。具體地說,可以防止批處理模式進程讀取或修改的數據庫塊使數據庫緩存不堪重負。例如,數據壓縮實用程序可能適當地在批處理模式下運行。
批處理模式處理與作業處理不同。使用JOB
命令生成作業進程。作業進程是在後臺運行的非交互進程。
可以使用在方法打開的%SYSTEM.Process.BatchFlag()
將當前進程設置爲在批處理模式下執行。BatchFlag()
帶有一個布爾參數:0
=直接模式(默認),1
=批處理模式。不帶參數的BatchFlag()
返回當前模式設置。
優先級
進程優先級決定多個併發進程如何競爭CPU
資源。具有較高優先級的進程優先訪問CPU時間
優先級是一個整數值。整數值的範圍取決於平臺,如下所示:Windows
的優先級範圍爲1
到15
,NORMAL=8
。Unix
®的優先級範圍爲-20
到20
,NORMAL=0
。通常,只使用三個整數值:低、正常和高。普通優先級是用戶進程的默認優先級。普通優先級使用負載平衡來調整CPU
使用率。
可以使用類中%SYS.ProcessQuery
的Priority
屬性來確定進程的當前優先級。
注意:幾乎從不需要更改進程的優先級,並且可能會影響系統的穩定性。
SetPrio()
方法
可以使用在方法的SYSTEM.Util.SetPrio()
來更改當前進程或由PID標識的另一個進程的優先級。可以指定一個正整數或負整數來按該值遞增或遞減當前優先級。在Windows
上,最小優先級爲1
;嘗試將優先級遞減到小於1
會將優先級設置爲1
。正常優先級爲8
。最大優先級爲15
。SetPrio()
返回新的優先級設置。(請注意,嘗試遞增到超過15
可能會將優先級重置爲1
或產生其他不可預測的結果。SetPrio()
返回值大於15
並不反映實際設置的優先級。)
^%PRIO 實用程序
可以使用較舊的^%PRIO
實用程序來確定當前進程的優先級,並將優先級設置爲低、正常或高的值。
若要使用^%PRIO
進行調用和更改,必須具有%DB_IRISsys
資源的寫權限。
要確定當前優先級,可以發出以下命令:DO ^%PRIO
。隨後的無參數寫入命令將返回當前優先級,如下所示:%PRIO=8
。
要設置當前進程的優先級,請發出以下命令之一DO LOW^%PRIO
, DO NORMAL^%PRIO
, or DO HIGH^%PRIO
(命令區分大小寫)。(在Windows
上)返回的設置優先級值爲:Low=4、Normal=8、HIGH=13
。
%SYSTEM.Process.BatchFlag()
更改當前進程優先級。但是,如果進程處於批處理模式 (1
),則使用上述命令提高當前進程的優先級會將進程模式從批處理模式 (1
) 更改爲直接模式 (0
)。
要爲當前進程設置批處理模式和優先級,請指定 DO SET^%PRIO(priority,mode)
,其中 priority,mode
是區分大小寫的字符串,priority=LOW
、NORMAL
或 HIGH
,mode=BATCH or NOBATCH
。可以指定一個或兩個以逗號分隔的選項。例如:DO SET^%PRIO("LOW,BATCH")
。此命令允許更改進程優先級而不影響批處理模式進程的模式狀態。
作業進程優先級
JOB
命令提供了一個選項來設置 jobbed
(後臺)進程的優先級。如果未指定,則子進程採用由系統定義的作業優先級修飾符調整的父進程基本優先級。例如,在 Windows
上,由於作業優先級修飾符,具有 NORMAL
優先級(優先級 = 8
)的父進程啓動優先級 = 7
的子進程。優先級爲 HIGH
的 jobbed
進程與交互式進程平等競爭 CPU
資源。