func (s *watchableStore) syncWatchersLoop() {
	defer s.wg.Done()

	for {
		s.mu.RLock()
		st := time.Now()
		lastUnsyncedWatchers := s.unsynced.size()
		s.mu.RUnlock()

		unsyncedWatchers := 0
		if lastUnsyncedWatchers > 0 {
			unsyncedWatchers = s.syncWatchers()
		}
		syncDuration := time.Since(st)

		waitDuration := 100 * time.Millisecond
		// more work pending?
		if unsyncedWatchers != 0 && lastUnsyncedWatchers > unsyncedWatchers {
			// be fair to other store operations by yielding time taken
			waitDuration = syncDuration
		}

		select {
		case <-time.After(waitDuration):
		case <-s.stopc:
			return
		}
	}
}
func (s *watchableStore) syncWatchersLoop() {
	defer s.wg.Done()

	for {
		s.mu.RLock()
		st := time.Now()
		lastUnsyncedWatchers := s.unsynced.size()
		s.mu.RUnlock()

		unsyncedWatchers := 0
		if lastUnsyncedWatchers > 0 {
			unsyncedWatchers = s.syncWatchers()
		}
		syncDuration := time.Since(st)

		waitDuration := 100 * time.Millisecond
		
		if unsyncedWatchers != 0 && lastUnsyncedWatchers > unsyncedWatchers {
			
			waitDuration = syncDuration
		}

		select {
		case <-time.After(waitDuration):
		case <-s.stopc:
			return
		}
	}
}
func ( s * watchableStore ) syncWatchersLoop ( ) { defer s . wg . Done ( ) for { s . mu . RLock ( ) st := time . Now ( ) lastUnsyncedWatchers := s . unsynced . size ( ) s . mu . RUnlock ( ) unsyncedWatchers := 0 if lastUnsyncedWatchers > 0 { unsyncedWatchers = s . syncWatchers ( ) } syncDuration := time . Since ( st ) waitDuration := 100 * time . Millisecond // more work pending? if unsyncedWatchers != 0 && lastUnsyncedWatchers > unsyncedWatchers { // be fair to other store operations by yielding time taken waitDuration = syncDuration } select { case <- time . After ( waitDuration ) : case <- s . stopc : return } } }
// syncWatchersLoop syncs the watcher in the unsynced map every 100ms.
syncWatchersLoop syncs the watcher in the unsynced map every 100ms .