编写一个并发性能测试的小步伐

程序 程序 1172 人阅读 | 0 人回复

<
150420jvj5n0bdun983zt8.jpg

1.为了统计qps,我利用了Interlocked锁

是的,是锁总会有耗损,由于利用了Interlocked锁的来由,必定会对机能测试形成必然的滋扰,那我们先去看看底噪是几,开100个线程,写个甚么皆没有干的函数,开端run。
150420li4nw6745gid444d.jpg

cpu跑谦了,水力齐开,qps到达了1.1亿, 哦哦哦,我念我能够疏忽那个影响了,您道是吧。
2编写qps计数

那里记载了qps、error、threads以及时间, 为了没有再开启线程战费事,以至借增长了一个根据工夫秒数挨印输出日记的功用。
统统便是那么简朴。
那是定义:
  1. private volatile int Qps = 0;
  2. private volatile int Error = 0;
  3. private volatile int Threads = 0;
  4. private DateTime dtStart = DateTime.Now;
  5. private volatile int printSecond = 1;
复造代码
  1. 我们供给个接心,增长qps计数
  2. public void AddQps()
  3. {
  4.     Interlocked.Increment(ref Qps);
  5.     Print();
  6. }
复造代码
到整数工夫便挨印
  1. if(Seconds == Interlocked.Exchange(ref printSecond,Seconds+1))
  2. {
  3.     Console.WriteLine($"time={Seconds}, threads= {MyThreads}, qps = {MyQps}, error = {MyError}");
  4. }
复造代码
增长毛病,战线程数,相似增长qps接心。
供给会见qps等的属性:
  1. public int Seconds => (int)((DateTime.Now - dtStart).TotalSeconds);
  2. public int MyQps => Qps / (Seconds==0 ? 1: Seconds);
  3. public int MyError => Error / (Seconds == 0 ? 1 : Seconds);
  4. public int MyThreads => Threads ;
复造代码
3 利用计数

正在我们内乱部的测试用例内乱,我们需求挪用计数类的增长qps等接心,那个计数类是齐局的,各个线程同享计数类真例。
  1. private void internalTest()
  2. {
  3.     var idx = random.Next(0, actions.Count);
  4.     try
  5.     {
  6.         actions[idx].Invoke();
  7.     }
  8.     catch (Exception ex)
  9.     {
  10.         calcValue.AddError();
  11.     }
  12.     finally
  13.     {
  14.         calcValue.AddQps();
  15.     }
  16. }
复造代码
4.并收线程测试

轮回新建线程类,并正在线程体内乱塞进单个的测试用例,和齐局的计数类。正在成立好一切的线程后,耗时没有计进机能的计较皆预热好,然后一块开启线程,开端测试。
为了让机能测试更充实,我编写了差别的计较历程,并利用随机函数随机获得并塞进线程施行。
固然统统弄定后,挪用便十分简朴了。
  1. var test = new ParallelTest(nThread);
  2. test.Start<UTest1>(TimeSpan.FromSeconds(nSpan));
复造代码
固然.net core 开启线程池限定, 制止机能成绩。
  1. ThreadPool.SetMinThreads(1000, 1000);
  2. ThreadPool.SetMaxThreads(1500, 1500);
复造代码
150421gl38xp38sb8x8bsr.png

嗯嗯,比拟底噪,差异仍是蛮年夜的,因而尽可使用。
5. 小结

8月更新终了,实在仍是蛮艰难的,写到最初皆没有明白写啥了,天生速率完整跟没有上啊。
例止小结,理性对待!

结的是啥啊,结的是我念您面赞而不成得的孤单。
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请发帖留言提供原创证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则