使用异步调用100线程进行压力测试
本文关键字:压力测试 线程 异步 调用 | 更新日期: 2023-09-27 17:49:02
我只想用c#异步调用100个线程(你可以认为每个线程一个用户),我想获得我的代码的序列化时间平均值。我应该为此使用线程池吗?Thx
你到底是什么意思?我只是想异步调用100线程
如果你需要异步执行100个任务-ThreadPool是最好的解决方案。您不关心线程,只需将工作项队列放入池中,操作系统在可用线程中拆分项目。您应该意识到,所有100个任务都可以只用3或5个(例如)线程来处理。
如果你需要创建100个线程并将每个任务分配给单独的线程- ThreadPool不是解决方案,因为ThreadPool不会创建新线程。您应该手动创建它们。
// Create 100 threads
var threads = new List<Thread>();
for (int p = 0; p < 100; p++)
{
threads.Add(new Thread(() => MyTask()));
}
// Start them all
foreach (var thread in threads)
{
thread.Start();
}
// Wait for completion
foreach (var thread in threads)
{
thread.Join();
}
您当然可以为您的任务使用ThreadPool,但是您应该了解ThreadPool
如何管理线程。如果您尝试以这样的方式启动100个线程:
for (int i = 0; i < 100; i++)
{
ThreaPool.QueueUserWorkItem(state => UnitOfWork());
}
则不能保证所有100个线程将在单独的线程中同时执行。ThreadPool将任务排队,并使用ThreadPool中的空闲线程执行它们,因此它可以将所有任务一个接一个地排队并一个接一个地执行它们。我并不是说它会这样做,但假设是可以的。
但是我认为你不应该为此烦恼。试着先使用ThreadPool,用ThreadPool. setmaxthreads(100)设置最大线程数限制为100(或以上),并按照我上面写的那样排队请求。
如果之后你想要更复杂的东西,你可以使用Thread类。创建100个Thread
类实例,全部启动并使用。如果你使用Thread
类,你可以控制每个线程的生命周期,即等待线程完成而不使用任何额外的技巧。
如果将MaxThreads设置为100或更多,这可能是最好的解决方案。
ThreadPool.SetMaxThreads(100)