Closed
Description
Describe the bug
极端情况下,协程的执行速度为ExpiryDuration
的时长
To Reproduce
Steps to reproduce the behavior:
- 创建一个
size
为1,ExpiryDuration
为10s的协程池 - 创建一个每次必panic的函数
panicFunc
- 向协程池添加5次
panicFunc
任务,并且后续不会再添加新的任务 - 结果每
10s
(也就是设定的ExpiryDuration
的时长)才会打印一次panic堆栈
代码如下:
package main
import (
"fmt"
"sync"
"time"
"github.com/panjf2000/ants/v2"
)
func main() {
runTimes := 5
var wg sync.WaitGroup
pool, _ := ants.NewPool(1, ants.WithExpiryDuration(10 * time.Second))
panicFunc := func() {
time.Sleep(10 * time.Millisecond)
wg.Done()
panic("test panic")
}
for i := 0; i < runTimes; i++ {
wg.Add(1)
_ = pool.Submit(panicFunc)
}
wg.Wait()
fmt.Printf("running goroutines: %d\n", pool.Running())
}
Expected behavior
5次panic
应该堆栈很快就打印完
Error messages/Trace logs
2021/03/25 21:10:15 worker exits from a panic: test panic
2021/03/25 21:10:15 worker exits from panic: goroutine 8 [running]:
github.com/panjf2000/ants/v2.(*goWorker).run.func1.1(0xc000072180)
/Users/admin/dev/ginlearn/ants/worker.go:58 +0x161
panic(0x10b2d60, 0x10f3fa0)
/usr/local/opt/go@1.13/libexec/src/runtime/panic.go:679 +0x1b2
main.main.func1()
/Users/admin/dev/ginlearn/ants/examples/test_panic/main.go:18 +0x67
github.com/panjf2000/ants/v2.(*goWorker).run.func1(0xc000072180)
/Users/admin/dev/ginlearn/ants/worker.go:68 +0xa5
created by github.com/panjf2000/ants/v2.(*goWorker).run
/Users/admin/dev/ginlearn/ants/worker.go:48 +0x4c
2021/03/25 21:10:25 worker exits from a panic: test panic
2021/03/25 21:10:25 worker exits from panic: goroutine 18 [running]:
github.com/panjf2000/ants/v2.(*goWorker).run.func1.1(0xc0000c8000)
/Users/admin/dev/ginlearn/ants/worker.go:58 +0x161
panic(0x10b2d60, 0x10f3fa0)
/usr/local/opt/go@1.13/libexec/src/runtime/panic.go:679 +0x1b2
main.main.func1()
/Users/admin/dev/ginlearn/ants/examples/test_panic/main.go:18 +0x67
github.com/panjf2000/ants/v2.(*goWorker).run.func1(0xc0000c8000)
/Users/admin/dev/ginlearn/ants/worker.go:68 +0xa5
created by github.com/panjf2000/ants/v2.(*goWorker).run
/Users/admin/dev/ginlearn/ants/worker.go:48 +0x4c
2021/03/25 21:10:35 worker exits from a panic: test panic
2021/03/25 21:10:35 worker exits from panic: goroutine 33 [running]:
github.com/panjf2000/ants/v2.(*goWorker).run.func1.1(0xc0000e6000)
/Users/admin/dev/ginlearn/ants/worker.go:58 +0x161
panic(0x10b2d60, 0x10f3fa0)
/usr/local/opt/go@1.13/libexec/src/runtime/panic.go:679 +0x1b2
main.main.func1()
/Users/admin/dev/ginlearn/ants/examples/test_panic/main.go:18 +0x67
github.com/panjf2000/ants/v2.(*goWorker).run.func1(0xc0000e6000)
/Users/admin/dev/ginlearn/ants/worker.go:68 +0xa5
created by github.com/panjf2000/ants/v2.(*goWorker).run
/Users/admin/dev/ginlearn/ants/worker.go:48 +0x4c
2021/03/25 21:10:45 worker exits from a panic: test panic
2021/03/25 21:10:45 worker exits from panic: goroutine 49 [running]:
github.com/panjf2000/ants/v2.(*goWorker).run.func1.1(0xc000072180)
/Users/admin/dev/ginlearn/ants/worker.go:58 +0x161
panic(0x10b2d60, 0x10f3fa0)
/usr/local/opt/go@1.13/libexec/src/runtime/panic.go:679 +0x1b2
main.main.func1()
/Users/admin/dev/ginlearn/ants/examples/test_panic/main.go:18 +0x67
github.com/panjf2000/ants/v2.(*goWorker).run.func1(0xc000072180)
/Users/admin/dev/ginlearn/ants/worker.go:68 +0xa5
created by github.com/panjf2000/ants/v2.(*goWorker).run
/Users/admin/dev/ginlearn/ants/worker.go:48 +0x4c
2021/03/25 21:10:55 worker exits from a panic: test panic
2021/03/25 21:10:55 worker exits from panic: goroutine 51 [running]:
github.com/panjf2000/ants/v2.(*goWorker).run.func1.1(0xc0000e6000)
/Users/admin/dev/ginlearn/ants/worker.go:58 +0x161
panic(0x10b2d60, 0x10f3fa0)
/usr/local/opt/go@1.13/libexec/src/runtime/panic.go:679 +0x1b2
main.main.func1()
/Users/admin/dev/ginlearn/ants/examples/test_panic/main.go:18 +0x67
github.com/panjf2000/ants/v2.(*goWorker).run.func1(0xc0000e6000)
/Users/admin/dev/ginlearn/ants/worker.go:68 +0xa5
created by github.com/panjf2000/ants/v2.(*goWorker).run
/Users/admin/dev/ginlearn/ants/worker.go:48 +0x4c
running goroutines: 0
System info (please complete the following information):
- OS: macOS 11.2.3
- Go Version: go1.13.15 darwin/amd64
- ants version: v2.4.3
Additional context
感觉这种情况很极端,生产环境中几乎不会存在,不知有没有修复的必要。