摘要:并发线程测试循环新建线程类,并在线程体内塞入单个的测试用例,以及全局的计数类。为了让性能测试更充分,我编写了不同的计算过程,并使用随机函数随机获取并塞入线程执行。
是的,是锁总会有损耗,因为使用了Interlocked锁的缘故,肯定会对性能测试造成一定的干扰,那我们先来看看底噪是多少,开100个线程,写个什么都不干的函数,开始run。
cpu跑满了,火力全开,qps达到了1.1亿, 哦哦哦,我想我可以忽略这个影响了,你说是吧。
这里记录了qps、error、threads以及时间, 为了不再开启线程和省事,甚至还增加了一个按照时间秒数打印输出日志的功能。
一切就是这么简单。
这是定义:
private volatile int Qps = 0;private volatile int Error = 0;private volatile int Threads = 0;private DateTime dtStart = DateTime.Now;private volatile int printSecond = 1;
我们提供个接口,增加qps计数public void AddQps(){ Interlocked.Increment(ref Qps); Print();}
到整数时间就打印
if(Seconds == Interlocked.Exchange(ref printSecond,Seconds+1)){ Console.WriteLine($"time={Seconds}, threads= {MyThreads}, qps = {MyQps}, error = {MyError}");}
增加错误,和线程数,类似增加qps接口。
提供访问qps等的属性:
public int Seconds => (int)((DateTime.Now - dtStart).TotalSeconds);public int MyQps => Qps / (Seconds==0 ? 1: Seconds);public int MyError => Error / (Seconds == 0 ? 1 : Seconds);public int MyThreads => Threads ;
在我们内部的测试用例内,我们需要调用计数类的增加qps等接口,这个计数类是全局的,各个线程共享计数类实例。
private void internalTest(){ var idx = random.Next(0, actions.Count); try { actions[idx].Invoke(); } catch (Exception ex) { calcValue.AddError(); } finally { calcValue.AddQps(); }}
循环新建线程类,并在线程体内塞入单个的测试用例,以及全局的计数类。在建立好所有的线程后,耗时不计入性能的计算都预热好,然后一块开启线程,开始测试。
为了让性能测试更充分,我编写了不同的计算过程,并使用随机函数随机获取并塞入线程执行。
当然一切搞定后,调用就非常简单了。
var test = new ParallelTest(nThread);test.Start<UTest1>(TimeSpan.FromSeconds(nSpan));
当然.net core 开启线程池限制, 避免性能问题。
ThreadPool.SetMinThreads(1000, 1000); ThreadPool.SetMaxThreads(1500, 1500);
嗯嗯,相比底噪,差距还是蛮大的,因此尽可以使用。
8月更新完毕,其实还是蛮困难的,写到最后都不知道写啥了,生成速度完全跟不上啊。
例行小结,理性看待!
结的是啥啊,结的是我想你点赞而不可得的寂寞。???
?都看到这了,还在乎点个赞吗?
?都点赞了,还在乎一个收藏吗?
?都收藏了,还在乎一个评论吗?
以上笔者的经历更像一张横向的知识网,创建了一个交流平台 914172719 ,群内有各种技术同行交流、学习资料、面试经验等。其中用到jenkins、docker、moutebank、python编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。
最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119391.html
摘要:函数式编程与面向对象编程编程的本质之剑目录编程的本质读到两篇文章写的不错综合摘录一下复合是编程的本质函数式程序员在洞察问题方面会遵循一个奇特的路线。在面向对象编程中,类或接口的声明就是表面。 函数式编程与面向对象编程[5]:编程的本质 之剑 2016.5.6 01:26:31 编程的本质 读到两篇文章,写的不错, 综合摘录一下 复合是编程的本质 函数式程序员在洞察问题方面会遵循...
摘要:是一个构建在上,基于模型的的并发框架,为构建伸缩性强,有弹性的响应式并发应用提高更好的平台。上述例子中的信件就相当于中的消息,与之间只能通过消息通信。当然模型比这要复杂的多,这里主要是简洁的阐述一下模型的概念。模型的出现解决了这个问题。 Akka是一个构建在JVM上,基于Actor模型的的并发框架,为构建伸缩性强,有弹性的响应式并发应用提高更好的平台。本文主要是个人对Akka的学习和应...
摘要:在代码整洁之道,提出一种软件质量,可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比,一份整洁的代码在质量上是可靠的,为团队开发,后期维护,重构奠定了良好的基础。 现在的软件系统开发难度主要在于其复杂度和规模,客户需求也不再像Winston Royce瀑布模型期望那样在系统编码前完成所有的设计满足用户软件需求。在这个信息爆炸技术日新月异的时代,需求总是在不停...
摘要:高性能代码的最佳实践前言在这篇文章中,我们将讨论几个有助于提升应用程序性能的方法。要获得有关应用程序需求的最好最可靠的方法是对应用程序执行实际的负载测试,并在运行时跟踪性能指标。 showImg(https://segmentfault.com/img/bVbtgk4?w=256&h=254); 高性能Java代码的最佳实践前言 在这篇文章中,我们将讨论几个有助于提升Java应用程序性...
阅读 1199·2021-11-24 11:16
阅读 3427·2021-11-15 11:38
阅读 1919·2021-10-20 13:47
阅读 546·2021-09-29 09:35
阅读 2191·2021-09-22 15:17
阅读 1012·2021-09-07 09:59
阅读 3372·2019-08-30 13:21
阅读 2903·2019-08-30 12:47