When using threadSafeSet for batch Pop, the overhead caused by RWMutex can be reduced. ```golang 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 } ```