关于并发的问题 web_concurrent_start 和 lr_rendezvous
web_concurrent_start和web_concurrent_end之间的请求可以一次性并发,这是我之前了解到的。集合点rendezvous,也可以通过多用户并发。
我现在想知道它们有什么区别。
就我的理解,
1用户下,使用web_concurrent_start(end)一次性提交20请求;
和20用户下,通过rendezvous来集合后,每用户提交1个请求;
这两种场景应该是一样的,因为都是一次向服务器同时提交了10个请求。
但是我实际跑的结果来看来,rendezvous方式只能达到19用户,到20用户时服务器卡死,已经尝试多次都如此;
但是使用web_concurrent_start(end)一次性提交20,30以上都没问题。
所以来这里问问有哪位大神知道为什么会这样。
附带我的代码
1,rendezvous方式,20用户
Action()
{
lr_rendezvous("bingfa");
web_custom_request("baseoper_4",
"URL=http://{IP_PORT}/PLATFORM/baseoper",
"Method=POST",
... 略 ...,
"Body={... 略 ...},
LAST);
}
2,web_concurrent_start(end)方式
Action()
{
int i;
web_concurrent_start(NULL);
for(i=1;i<=20;i++){
web_custom_request("baseoper_4",
"URL=http://{IP_PORT}/PLATFORM/baseoper",
"Method=POST",
... 略 ...,
"Body={... 略 ...},
LAST);
}
web_concurrent_end(NULL);
} 使用concurrent时,需要确保脚本中有rendezvous,如果有才是一个有效的并发,如果没有就是伪并发了 1中的20个用户是肯定的20个并发,但2中的20个是通过for来一个个执行的,别说i<=20了,就是i<=200都没事,因为这么多用户并没有并发 谢谢城邦的回复
2中我虽然使用for来循环,但我想达到的效果是20个请求一起发出去,所以我使用了web_concurrent_start(end)啊
这个函数的作用是当遇到了web_concurrent_end,才会把之前的请求一起发出。
我在回放的时候,也是看到for了20次以后,走到web_concurrent_end才发出去的。这样应该也和1里面的效果一样吧? 城邦 发表于 2015-5-6 10:24
1中的20个用户是肯定的20个并发,但2中的20个是通过for来一个个执行的,别说i
刚才没有点击回复。看到请回一下。谢谢 这个脚本中只有web_custom_request一个请求吗?还有没其他内容? lansanniu 发表于 2015-5-6 10:43
谢谢城邦的回复
2中我虽然使用for来循环,但我想达到的效果是20个请求一起发出去,所以我使用了web_conc ...
回放2的时候,看服务器有没有收到20条请求啊? saharaqs 发表于 2015-5-6 14:20
回放2的时候,看服务器有没有收到20条请求啊?
这个脚本中只有web_custom_request一个请求吗?还有没其他内容?
-----------------------------------------
是的方式1中只有一个请求,我用20用户集合并发的,并发一次就是20个请求
回放2的时候,看服务器有没有收到20条请求啊?
-----------------------------------------
服务器有收到20条请求,并且正确操作数据库了,我查看过没问题的 场景中设置的是线程模式还是进程模式?
saharaqs 发表于 2015-5-6 17:06
场景中设置的是线程模式还是进程模式?
线程模式
页:
[1]