hyper0x/goc2p

关于原书第一版中channel和goroutine一章载荷发生器 并发量公式

steedyu opened this issue · 0 comments

并发量 = 单个载荷的响应超时时间 / 载荷的发送间隔时间
1e9 / lps 代表了发送的间隔,
对这一段有疑问?
a) lps是发送频率可以理解,1e9 / lps 代表了发送的间隔 为什么这个可以作为发送间隔?
b)并发量 的公式 也是不理解?

另外再后续实现代码里,
func (gen *myGenerator) genLoad(throttle <-chan time.Time) {
callCount := uint64(0)
Loop:
for ; ; callCount++ {
select {
case <-gen.stopSign:
gen.handleStopSign(callCount)
break Loop
default:
}
gen.asyncCall()
if gen.lps > 0 {
select {
case <-throttle:
case <-gen.stopSign:
gen.handleStopSign(callCount)
break Loop
}
}
}
}

这里再start里其实只是一个goroutine启动,然后无限循环,这样的测试,其实每个发送请求之间并不是一起过去的,是一次循环一次循环出去的。那这个并发其实并不准确。为何不使用
for i =0 ; i < current ; i ++ {
go func() {
for {
//todo
}
}()
}
这样在启动起来之后,基本可以说同1s,有那么多goroutine 进行请求。

而上述循环中,不停开启goroutine,如果接口响应很快的话,基本是不可能有一个同一时间的压力

这里,我的理解是否有偏差,还望解答,谢谢。