性能测试与Jmeter测试原理---(2)

jmeter模拟并发的原理

线程组

打开jmeter添加线程组后我们会看到如图界面。
主要探讨下 线程数 循环次数 是如何实现的。
在这里插入图片描述``

线程的分配

这段代码的执行结果可以看到每次实例化之后,都会分配给不同的内存地址,表名每个线程都分配一个特定的内存。

import requests,threading
class Test():
    def __init__(self):
        self.session = requests.session()
        print(id(self.session))
if __name__ == '__main__':
    td_1 = Test()
    td_2 = Test()
    td_3 = Test()
    td_4 = Test()
    #这段代码的执行结果可以看到每次实例化之后,都会分配给不同的内存地址,表名每个线程都分配一个特定的内存。

下图的代码实例化之后进行了10次循环,这10次循环是同一个内存地址上进行的,没有实现并发的目的。

import requests,threading
class Test():
    def __init__(self):
        self.session = requests.session()
    def start(self):
        print(id(self.session))
if __name__ == '__main__':
    td_1 = Test()
    for i in range(10):
        threading.Thread(target=td_1.start())

将实例化写在循环内部,每次循环都会从新分配内存地址,可以实现并发的功能。

import requests,threading
class Test():
    def __init__(self):
        self.session = requests.session()
    def start(self):
        print(id(self.session))
if __name__ == '__main__':
    for i in range(10):
        td_1 = Test()
        threading.Thread(target=td_1.start())

每一个线程必须对应不同的session实例。
线程数和分配的内存地址的个数是一样的,经过上面的代码打底就清楚线程数是什么意思了。

循环次数表示的是每一个线程循环执行了多少次。
下面这个代码就可以说设置为:线程数3,循环次数2
输出结果为:
35612040
35612040
56028744
56028744
56028576
56028576
这种样子。

import requests,threading
class Test():
    def __init__(self):
        self.session = requests.session()
    def start(self):
        print(id(self.session))

if __name__ == '__main__':
    for i in range(3):
        td_1 = Test()
        for j in range(2):
            threading.Thread(target=td_1.start())

思考一个问题,一台电脑可以模拟多少个并发呢?

1)取决于CUP的性能,cpu性能越好模拟线程数越大。
2)内存越大,可分配的资源越多,可模拟的线程数也就越多。
3)每个线程占用资源也不一样,线程占用资源多自然就划分数目小。
4)电脑的瓶颈也会影响线程数。比如cpu性能很好但是内存满了,内存瓶颈就会影响线程数的运行。

发布了20 篇原创文章 · 获赞 0 · 访问量 606

猜你喜欢

转载自blog.csdn.net/Test_Simon/article/details/105311625