1. 程式人生 > >loadrunner理解進程和線程的區別

loadrunner理解進程和線程的區別

ext 測試 是什麽 假設 就會 用戶 相關 場景 過程

今天壓測活動相關頁面,遇到一個問題:
400個VU,設置按線程運行出現多個報錯,設置為按進程運行全部運行成功,沒有報錯。所以好奇他兩者的區別,現在大致了解了~~~

進程和線程的區別是什麽?
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小於進程,使得多線程程序的並發性高。另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。

線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

進程方式和線程方式的優缺點:

選擇按照進程方式運行, 每個用戶都將啟動一個mmdrv進程,多個mmdrv進程會占用大量內存及其他系統資源,這就限制了可以在任一負載生成器上運行的並發用戶數的數量,因為負載機的資源(內存及其他系統資源)是有限的。

選擇按照線程方式運行,在默認情況下,controller為每50個用戶僅啟動一個mmdrv進程,而每個用戶都按線程方式來運行,這些線程用戶將共享父進程的內存段,這就節省了大量內存空間,從而可以在一個負載生成器上運行更多的用戶。

選擇線程方式雖然可以減少啟動的mmdrv進程數,減少了內存的占用,但是也容易出現一個問題,例如,同一個測試場景,用線程並發就會出現超時失敗或報錯,而用進程並發就沒錯。為什麽呢?因為線程的資源是從進程資源中分配出來的,因此同一個進程中的多個線程會有共享的內存空間,假設a線程要用資源就必須等待b線程釋放,而b線程也在等待其他資源釋放才能繼續,這樣就會出現這個問題。

所以如果在並發時出現報錯,可嘗試下修改並發用戶運行方式。

技術分享圖片

當然,報錯也可能是其他因素影響,但是大家也可以嘗試著根據報錯原因,逐步排查問題呦。

loadrunner理解進程和線程的區別