【发布时间】:2013-04-22 09:01:36
【问题描述】:
假设我的目标是x requests/sec,我想连续生成。我的目标是以大致相同的时间间隔开始这些请求,而不是仅仅生成 x 个请求然后等到 1 秒过去并一遍又一遍地重复整个事情.我没有对这些请求做任何假设,有些可能需要比其他请求更长的时间,这就是为什么我的调度程序线程不会执行请求(或等待它们完成),而是将它们交给足够大的线程池。
现在如果x 在数百或更少的范围内,我可能会使用.net 的Timers 或Thread.Sleep 并使用Stopwatch 检查实际经过的时间。
但如果我想进入数千或数万,我可以尝试使用高分辨率计时器来保持我的大致相同的间隔方法。但这会(在通用操作系统上的大多数编程环境中)意味着一定量的手动编码以及旋转等待等,我不确定采取这条路线是否值得。
扩展初始方法,我可以改为使用 Timer 休眠并在每个 Timer 事件上执行 y 请求,监控每秒实现的实际请求并在运行时微调 y。效果介于“放置所有 x 请求并等待自启动后 1 秒”之间,我试图不这样做,“在开始下一个请求之前或多或少地等待 1/x 秒”。
后者似乎是一个不错的折衷方案,但有什么更容易的方法,同时仍能随着时间的推移在一定程度上均匀分布请求?这一定是由不同的人实施了数百次,但我找不到关于这个问题的好的参考资料。
那么最简单的实现方法是什么?
【问题讨论】:
标签: timer load-testing