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