初级会员
  • 第 74890 位会员
  • fichtner
  • 2022-08-03 10:54:51
  • Offline
  • 20 68

最近发布的主题

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了主题 关于go协程池的疑问
    #10 @saberlong 醍醐灌顶,万分感谢🙏
  • 评论了主题 关于go协程池的疑问
    time.Sleep(10 * time.Microsecond)改为:testFunc() 使用go1.18版本,对比无协程池和Ants协程池(n=1千万),修改前无协程池快,修改后协程池快(且使用协程池与不使用协程池的空间消耗基本一样) ``` func DoCopyStack(a, b int) int { if b < 100 { return DoCopyStack(0, b+1) } return 0 } func testFunc() { DoCopyStack(0, 0) } ```
  • 评论了主题 关于go协程池的疑问
    另外,请问大家,我用sleep来模拟任务是否有问题?因为我将任务改为递归之后,结果是使用线程池快。【go1.18版本】
  • 评论了主题 关于go协程池的疑问
    @saberlong 非常感谢。
  • 评论了主题 关于go协程池的疑问
    嗯嗯,好的,非常感谢大家。最后一个问题,在go1.13版本wg.Add()的位置对时间和内存影响巨大的原因(不使用协程池),大家有了解吗?我下载了go1.14也跑了下。下面是结果: ``` func TestNoPoolAddN(t *testing.T) { fmt.Println("任务总数",n) var wg sync.WaitGroup wg.Add(n) for i := 0; i < n; i++ { go func() { time.Sleep(10 * time.Microsecond) wg.Done() }() } wg.Wait() mem := runtime.MemStats{} runtime.ReadMemStats(&mem) curMem = mem.TotalAlloc/MiB - curMem t.Logf("memory usage:%d MB", curMem) } func TestNoPoolAdd1(t *testing.T) { fmt.Println("任务总数",n) var wg sync.WaitGroup for i := 0; i < n; i++ { wg.Add(1) go func() { time.Sleep(10 * time.Microsecond) wg.Done() }() } wg.Wait() mem := runtime.MemStats{} runtime.ReadMemStats(&mem) curMem = mem.TotalAlloc/MiB - curMem t.Logf("memory usage:%d MB", curMem) } ``` go1.18 版本结果: ``` DJ-CE02F28JGEMQQL7H:ants user$ go version go version go1.18.3 darwin/amd64 DJ-CE02F28JGEMQQL7H:ants user$ go test -run="TestNoPool" -v === RUN TestNoPoolAddN 任务总数 10000000 ants_test.go:213: memory usage:919 MB --- PASS: TestNoPoolAddN (3.14s) === RUN TestNoPoolAdd1 任务总数 10000000 ants_test.go:230: memory usage:917 MB --- PASS: TestNoPoolAdd1 (3.29s) PASS ok github.com/panjf2000/ants/v2 6.900s ``` go1.14 版本结果: ``` DJ-CE02F28JGEMQQL7H:ants user$ go version go version go1.14.15 darwin/amd64 DJ-CE02F28JGEMQQL7H:ants user$ go test -run="TestNoPool" -v === RUN TestNoPoolAddN 任务总数 10000000 ants_test.go:213: memory usage:849 MB --- PASS: TestNoPoolAddN (3.13s) === RUN TestNoPoolAdd1 任务总数 10000000 ants_test.go:230: memory usage:763 MB --- PASS: TestNoPoolAdd1 (2.66s) PASS ok github.com/panjf2000/ants/v2 6.152s ``` go1.13 版本结果: ``` DJ-CE02F28JGEMQQL7H:ants user$ go version go version go1.13.15 darwin/amd64 DJ-CE02F28JGEMQQL7H:ants user$ go test -run="TestNoPool" -v === RUN TestNoPoolAddN 任务总数 10000000 --- PASS: TestNoPoolAddN (127.86s) ants_test.go:213: memory usage:5084 MB === RUN TestNoPoolAdd1 任务总数 10000000 --- PASS: TestNoPoolAdd1 (3.16s) ants_test.go:230: memory usage:611 MB PASS ok github.com/panjf2000/ants/v2 132.974s ``` 可能是go1.14版本更新有性能上的改进或者是bug修复,自己有查go1.14的版本更新,但是不清楚是原因在哪?看着不像是goroutine的异步抢占式调度造成的。