性能測試基礎知識-處理器調度程序性能 軟件測試
處理器調度程序性能概述
線程支持線程可看作開銷低的進程。它是一個可分派實體,創建它需要的資源比創建一個進程需要的資源少。
進程由一個或多個線程組成。事實上,操作系統的早期發行版中負載的直接遷移就是繼續創建和管理進程。每個新進程在創建時只帶有單一的線程,該線程具有其父進程的優先級并與其它進程中的線程爭用處理器。進程在執行時擁有它所使用的資源,而線程僅僅擁有它的當前狀態。
當新的或修改的應用程序利用操作系統的線程支持創建額外的線程時,那些線程在該進程的上下文中創建。它們共享進程的私有段和其它資源。
進程中的一個用戶線程有一個特定的爭用作用域。如果爭用作用域是全局的,則該線程與系統中所有其它線程一起爭用處理器時間。在進程創建時產生的線程具有全局爭用作用域。如果爭用作用域本地的,則該線程與進程中的其它線程競爭以成為進程共享的處理器時間的接收方。
決定接下來應該運行哪個線程的算法叫調度策略。
進程和線程進程是系統中的一個活動,它由某個命令、shell 程序或另一進程啟動。
進程的屬性如下:
pid pgid uid gid環境cwd文件描述符信號操作進程統計信息nice
線程的屬性如下:
堆棧調度策略調度優先級暫掛信號阻塞信號線程特定的數據
每個進程由一個或多個線程組成。線程是一個單獨的控制序列流。多個控制線程允許應用程序進行重疊操作,例如讀取終端和寫文件。
多個控制線程也允許應用程序同時為來自多個用戶的請求服務。線程提供了這些能力而不需多個進程那樣的額外開銷,例如要通過 fork() 系統調用創建多個進程。
AIX 4.3.1 中引入了一個快速的 fork 例程 f_fork()。該例程對多線程應用程序非常有用,它們將立刻調用 exec() 子例程,前提是之前應先調用 fork() 子例程。fork() 子例程運行起來較慢,因為在實際派生及讓其子例程運行全部子處理程序來初始化所有鎖之前,它必須調用 fork 處理程序獲得所有的庫鎖。f_fork() 子例程忽略這些處理程序并直接調用 kfork() 系統調用。Web 服務器是一個可以使用 f_fork() 子例程的很好的應用程序示例。
進程和線程的優先級優先級管理工具處理進程的優先級。在 AIX V4 中,進程優先級只是線程優先級的前驅。當調用 fork() 子例程時,會創建一個進程和一個要在其中運行的線程。線程的優先級歸結于進程。
內核為每個線程維護一個優先級值(有時稱為調度優先級)。優先級值是一個正整數且與關聯線程的重要性的變化方向相反。也就是說,較小的優先級值表示一個相對重要的線程。當調度程序尋找線程進行分派時,它選擇具有較小優先級值的可分派線程。
線程可以有固定的優先級或不固定的優先級。優先級固定的線程的優先級值是一個常量,而優先級不固定的線程的優先級值根據用戶線程最小優先級級別(常量 40)、線程的 nice 值(缺省值是 20,可隨意由 nice 或 renice 命令進行設置)和其處理器使用的損失而變化。
線程的優先級可以固定成某個值,如果用 setpri() 子例程設置(固定)它們的優先級的話,它們可以具有小于 40 的優先級值。這些線程不會受到調度程序重算算法的影響。如果它們的優先級值固定且小于 40,這些線程將在可以運行所有用戶線程之前運行和完成。例如,一個具有固定值 10 的線程將在具有固定值 15 的線程之前運行。
用戶可以應用 nice 命令使線程的不固定優先級變低。系統管理員可將一個負的 nice 值應用給線程,這樣就給了它較好的優先級。
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/