code: func selectNodesForPreemption(pod *v1.Pod,
  	nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo,
  	potentialNodes []*v1.Node,
  	fitPredicates map[string]predicates.FitPredicate,
  	metadataProducer predicates.PredicateMetadataProducer,
  	queue internalqueue.SchedulingQueue,
  	pdbs []*policy.PodDisruptionBudget,
  ) (map[*v1.Node]*schedulerapi.Victims, error) {
  	nodeToVictims := map[*v1.Node]*schedulerapi.Victims{}
  	var resultLock sync.Mutex
  
  	// We can use the same metadata producer for all nodes.
  	meta := metadataProducer(pod, nodeNameToInfo)
  	checkNode := func(i int) {
  		nodeName := potentialNodes[i].Name
  		var metaCopy predicates.PredicateMetadata
  		if meta != nil {
  			metaCopy = meta.ShallowCopy()
  		}
  		pods, numPDBViolations, fits := selectVictimsOnNode(pod, metaCopy, nodeNameToInfo[nodeName], fitPredicates, queue, pdbs)
  		if fits {
  			resultLock.Lock()
  			victims := schedulerapi.Victims{
  				Pods:             pods,
  				NumPDBViolations: numPDBViolations,
  			}
  			nodeToVictims[potentialNodes[i]] = &victims
  			resultLock.Unlock()
  		}
  	}
  	workqueue.ParallelizeUntil(context.TODO(), 16, len(potentialNodes), checkNode)
  	return nodeToVictims, nil
  }
docs: // selectNodesForPreemption finds all the nodes with possible victims for
  // preemption in parallel.