int numCores = Runtime.getRuntime().availableProcessors();
int splittingSize = Math.max(list.size() / (numCores << 2), 128);
List<List<Map.Entry<K, V>>> partition = splitIntoLists(list, splittingSize);
ExecutorAllCompletionService eacs = new ExecutorAllCompletionService(executor);
for (final List<java.util.Map.Entry<K, V>> inputPartition : partition) {
eacs.submit(new Runnable() {
@Override
public void run() {
int interruptCounter = 0;
for (Map.Entry<K, V> e : inputPartition) {