架构师训练营 Week 7 [命题 + 总结]

用户头像
莫莫大人
关注
发布于: 2020 年 07 月 23 日
架构师训练营 Week 7 [命题+总结]

用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com



使用机器为i5处理器,结果输出如图,但并不是每次都能出来比较接近的结果,有时会高至40ms。

关于这次作业,还有以下问题需要之后进一步的探索:

  1. 在相同的系统环境下与相同的参数设置下连续运行程序多次,是什么导致了平均响应时间的大幅波动?(我猜也许跟本地机器无关,确实是请求链接时的网络波动)

  2. 我测试的方式是否准确,运行时间里是否包含了其他无关因素的影响?

  3. 使用Task类与使用Parallel类来做有什么区别?

  4. 95%响应时间纠结了好久,没想清楚怎么做。不可能愚蠢到去用List排序。也许是自己对概念的理解还不准确。



using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Net;
namespace WebTest
{
public class Program
{
public static void Main(string[] args)
{
//设置并发线程数
int parallel = 10;
//设置Http请求次数
int requestTimes = 100;
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.baidu.com/");
List<int> Reti = new List<int>();
for (int i = 0; i < requestTimes; i++)
{
Reti.Add(i);
}
List<Task> task = new List<Task>();
TaskFactory taskfactory = new TaskFactory();
DateTime start_time = DateTime.Now;
Reti.ForEach(id =>
{
task.Add(taskfactory.StartNew(async () =>
{
WebResponse result = await myReq.GetResponseAsync();
}));
if (task.Count >= parallel)
{
Task.WaitAny(task.ToArray());
task = task.Where(t => t.Status == TaskStatus.Running).ToList();
}
});
DateTime end_time = DateTime.Now;
TimeSpan ts = end_time - start_time;
int ch = (int)ts.TotalMilliseconds;
Console.WriteLine("{0}线程并发,{1}次请求的 平均响应时间为:{2}ms ", parallel, requestTimes, ch / parallel);
Console.ReadLine();
}
}
}



学习总结:

本周的学习内容围绕性能优化与性能测试(贴两张笔记图吧,就不慢慢敲字了)





用户头像

莫莫大人

关注

还未添加个人签名 2018.07.31 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 Week 7 [命题+总结]