When using threadSafeSet for batch Pop, the overhead caused by RWMutex can be reduced.
func (s *threadUnsafeSet[T])PopN(n int)([]T, int) {
suc := 0
ss := make([]T, 0, n)
for item := range *s {
ss = append(ss, item)
delete(*s, item)
suc += 1
if suc >= n {
return ss, suc
}
}
return ss, suc
}