loadrunner理解進程和線程的區別

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

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

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

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

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

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

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

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

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

loadrunner理解進程和線程的區別

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章