CPU 线程数是否限制了蝗虫用户?

Does number of CPU threads limits locust USERS?

我正在使用 python + Locust 进行性能测试。我主要使用 java 和 java 1 cpu 线程 = java 线程。所以如果我有 12 个线程的虚拟机,我只能并行执行 12 个操作。

但是locust有参数USERS代表“并发Locust用户的峰值数”。它的工作方式相同吗?如果我设置 USERS = 25 但 VM 只有 12 个线程,这是否意味着它同时只会并行执行 12 个操作,其余的将等到任何线程完成?

Locust 使用 gevent,这使得 I/O 异步。单个 Locust/Python 进程只能使用一个 CPU 线程(稍微过于简化),但它可以发出并发 HTTP 请求:当一个用户发出请求时,控制权立即移交给其他 运行ning 用户,这又可以触发其他请求。

这与 Java(它是线程化的但通常是同步的)有根本的不同,但类似于 JavaScript。

只要你运行足够的Locust worker进程,这是一个非常高效的方法,单个进程可以处理数千个并发用户(事实上,用户数几乎从来没有限制-每秒请求数是限制因素)

查看 Locust 的文档 (https://docs.locust.io/en/stable/running-locust-distributed.html)

Because Python cannot fully utilize more than one core per process (see GIL), you should typically run one worker instance per processor core on the worker machines in order to utilize all their computing power.