如何实现100个并发连接(测试用的).

yanjinbin01 2008-04-24 12:23:23
想对自己写的东西进行并发.
但是用程序 不知道怎么实现,因为在测试里面开线程,但这个还是有先后的,有没有真正实现100个并发的方法.
我的测试代码如下:
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 99; i++)
{
Thread newThread = new Thread(new ThreadStart(Program.test));
newThread.Start();
//这样创建线程执行 还是有先后,达不到并发目的啊,怎么才能让他们能真正并发.
}
}
static void test()
{
Console.WriteLine("hello");
}
}
...全文
1164 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
难道是用脚本打开一百个程序来执行.
那还不如直接用线程呢,
大家做并发测试怎么怎么做的啊.
changjiangzhibin 2008-04-24
  • 打赏
  • 举报
回复
是不分先后的,可用程序控制;
线程的优先级也只有5级;
LeoMaya 2008-04-24
  • 打赏
  • 举报
回复
这样的话, 用脚本好了

真要做到同时, 找100个人帮你吧
yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
up下.
cc_net 2008-04-24
  • 打赏
  • 举报
回复
自己写思想应该是一样的,在start之前设置一个集合点。

先把线程挂起,全部new完以后在唤醒(这里我不知怎么实现)

不过不管你怎么样都是并发的,不可能并行。就算是以前申请去执行test也不能同时100个一起打印,还是排队的!ABCD

你直接运行一样可以看成并发,A B C D,知识他们之间间隔变大, new了A以后直接去执行了
yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
TO:cc_net 就是测试一个业务,100W用户使用情况,对并发要求其实也不是那么高,
不想用自动测试工具LR去做(因为不会).只想写个测试小工具来搞定他.
cc_net 2008-04-24
  • 打赏
  • 举报
回复
而且你这意思我不太明白,每个用户使用你这个程序不都for 100次,开100个线成

好象A,B2个用户之间没有什么相互影响把,他们不存在同步和互斥的关系啊!?不明白!?


一般我们都是测试一个业务的,比如提交时的并发,100个用户同时提交,看服务器的压力和响应情况,对于这种测试可以使用LR来卤质脚本
然后产生100个虚拟用户,在提交前设置集合点,全部到达后一同提交,这个一般叫并发测试。

所以我不太明白你这里测试的意义
cc_net 2008-04-24
  • 打赏
  • 举报
回复
并发和并行的概念

并发是在同一时间类,同时发出一个请求。比如一条马路,10辆车同时要走,但实际每个时刻只能有1辆,这叫并发

并行是同时执行。就是10条马路,10辆车同时出发


首先要确定你要并行还是并发。

你说要同时创建100个线成,那是不可能的,除非你有100个CPU内核。


看你的程序到底要测试什么了!



yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
那位进行过并发压力测试的 给点经验吧.
journeydj 2008-04-24
  • 打赏
  • 举报
回复
真正的并发。。。估计不能实现。。
wapit 2008-04-24
  • 打赏
  • 举报
回复
这样跟并发没区别了吧......难道系统上线后能出现精确到你这种程度上的并发?
jzywh 2008-04-24
  • 打赏
  • 举报
回复
static void test()
{
Console.WriteLine("hello");
Thread.Seep(..);
Console.WriteLine("hello");
Thread.Seep(..);
Console.WriteLine("hello");
}
airloft 2008-04-24
  • 打赏
  • 举报
回复
哦,要改一下
private void ThreadTest()
{
while(true)
if (begintest)
{
Program.test();
break;
}
}
如果怕空while会占用cpu影响测试的话可以考虑用ThreadWaitHandle
airloft 2008-04-24
  • 打赏
  • 举报
回复
很简单啊,加个开关
bool begintest=false;
主体改一下
for (int i = 0; i < 99; i++)
{
Thread newThread = new Thread(new ThreadStart(ThreadTest));
newThread.Start();
newThread.sleep(1000-i);//这个值越后等待时间越短,这样让他们在大致一个时间范围来并发,
//但是这样测试时间太长了,上1000个并发等死人.晕了.不知道有没有更好办法没
}
begintest=true;
再加下面这段
private void ThreadTest()
{
if (begintest) Program.test;
}
yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
要测试的程序是test(),不能加代码进去的。

谁来说下啊.
bineran 2008-04-24
  • 打赏
  • 举报
回复
while (true)
{
if (DateTime.Now.Minute == 34)
{
Console.WriteLine("hello");
}
}
bineran 2008-04-24
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
for (int i = 0; i < 99; i++)
{
Thread newThread = new Thread(new ThreadStart(Program.test));
newThread.Start();

}
Console.ReadKey();

}
static void test()
{
while (System.DateTime.Now.Minute == 32)
{
Console.WriteLine("hello");
}
}
yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
sleep这个属性是个静态方法,不能这样用.晕了,得想另外一个阻塞方法
yanjinbin01 2008-04-24
  • 打赏
  • 举报
回复
我想用sleep来暂停线程,然后让他们同一时间在执行.
如:
for (int i = 0; i < 99; i++)
{
Thread newThread = new Thread(new ThreadStart(Program.test));
newThread.Start();
newThread.sleep(1000-i);//这个值越后等待时间越短,这样让他们在大致一个时间范围来并发,
//但是这样测试时间太长了,上1000个并发等死人.晕了.不知道有没有更好办法没
}

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧