code: func (b *bufferedBackend) processEvents(events []*auditinternal.Event) {
  	if len(events) == 0 {
  		return
  	}
  
  	// TODO(audit): Should control the number of active goroutines
  	// if one goroutine takes 5 seconds to finish, the number of goroutines can be 5 * defaultBatchThrottleQPS
  	if b.throttle != nil {
  		b.throttle.Accept()
  	}
  
  	if b.asyncDelegate {
  		b.wg.Add(1)
  		go func() {
  			defer b.wg.Done()
  			defer runtime.HandleCrash()
  
  			// Execute the real processing in a goroutine to keep it from blocking.
  			// This lets the batching routine continue draining the queue immediately.
  			b.delegateBackend.ProcessEvents(events...)
  		}()
  	} else {
  		func() {
  			defer runtime.HandleCrash()
  
  			// Execute the real processing in a goroutine to keep it from blocking.
  			// This lets the batching routine continue draining the queue immediately.
  			b.delegateBackend.ProcessEvents(events...)
  		}()
  	}
  }
docs: // processEvents process the batch events in a goroutine using delegateBackend's ProcessEvents.