Skip to content

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

@steedyu

Description

@steedyu

并发量 = 单个载荷的响应超时时间 / 载荷的发送间隔时间
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,如果接口响应很快的话,基本是不可能有一个同一时间的压力

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions