情景:有100个线程来get请求一个网址,方法为:
using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri(url); client.Timeout = new TimeSpan(0, 0, nTimeOut); var watch = Stopwatch.StartNew(); var mess = await client.GetAsync(url); watch.Stop(); time = watch.ElapsedMilliseconds; return new Tuple<long, HttpResponseMessage>(time, mess); }
最后看了一下结果List<long>发现是递增的。然后我根据我的理解认为情况是这样子的:
线程A/B都启动了,然后A到了
var watch = Stopwatch.StartNew();这一行。这个时候CPU把资源给了B线程,相当于A线程挂起来了。
然后B线程执行到某一步B线程挂起来,CPU资源给了A,这时候A继续跑,跑完了
watch.Stop();然后计时。但是这个watch计算的时间不仅仅包括A本身的时间还有A挂起来的这段时间。
上述我的理解不知道对不对。有没有大神解释一下?
你想的太复杂了。
简单的说,计时就是从Watch开始,到Watch结束的流逝时间。不管有没有多线程。
那就是说我用Stopwatch计时是受线程数量影响了?
var watch = new Stopwatch();
watch.Start();
。。。。。。。。。。。。。。。。。
watch.Stop();
http://www.cnblogs.com/xima/p/7211592.html
你理解对着呢,时间片基本就是这样的。
https://baike.baidu.com/item/%E6%97%B6%E9%97%B4%E7%89%87%E8%BD%AE%E8%BD%AC%E8%B0%83%E5%BA%A6/3059054?fr=aladdin
等待该GetAsync(url);执行所花的时间。