I have a method with some logic that take ~40ms
When I am call this method more times (parallel)- each loop duration takes more time (a lot).
For example:
1 call - ~40ms (avg)
5 calls - ~63ms (avg)
10 calls - ~120ms (avg)
100 calls - ~1200ms (avg)
and so on...
Code:
int numberOfExecution = 100;
ExecutorService executor = Executors.newFixedThreadPool(numberOfExecution);
for (int i = 0; i < numberOfExecution; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
MyObject obj1 = readBytesFromFile(1);
MyObject obj2 = readBytesFromFile(2);
MyObject obj3 = readBytesFromFile(3);
MyObject obj4 = readBytesFromFile(4);
final Map<Integer, MyObject> objects = new TreeMap<>();
objects.put(0, obj1);
objects.put(1, obj2);
objects.put(2, obj3);
objects.put(3, obj4);
Foo foo = new Foo(objects);
long startTime = System.currentTimeMillis();
Thread.sleep(40); // sleep for 40ms to demonstrate my 40ms logic
long endTime = System.currentTimeMillis();
float durationMs = endTime - startTime;
System.out.println("Foo.bar() duration: " + durationMs);
}
});
}
executor.shutdown();
while (!executor.isTerminated()) { }
Console:
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 43.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 41.0
Foo.bar() duration: 48.0
Foo.bar() duration: 62.0
Foo.bar() duration: 48.0
Foo.bar() duration: 48.0
Foo.bar() duration: 48.0
Foo.bar() duration: 48.0
Foo.bar() duration: 49.0
Foo.bar() duration: 48.0
Foo.bar() duration: 49.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 49.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 49.0
Foo.bar() duration: 74.0
Foo.bar() duration: 40.0
Foo.bar() duration: 70.0
Foo.bar() duration: 40.0
Foo.bar() duration: 50.0
Foo.bar() duration: 43.0
Foo.bar() duration: 40.0
Foo.bar() duration: 43.0
Foo.bar() duration: 56.0
Foo.bar() duration: 63.0
Foo.bar() duration: 45.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 43.0
Foo.bar() duration: 43.0
Foo.bar() duration: 48.0
Foo.bar() duration: 41.0
Foo.bar() duration: 58.0
Foo.bar() duration: 59.0
Foo.bar() duration: 55.0
Foo.bar() duration: 42.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 70.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 75.0
Foo.bar() duration: 40.0
Foo.bar() duration: 43.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 67.0
Foo.bar() duration: 59.0
Foo.bar() duration: 40.0
Foo.bar() duration: 57.0
Foo.bar() duration: 42.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 43.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 45.0
Foo.bar() duration: 44.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 40.0
Foo.bar() duration: 45.0
Foo.bar() duration: 41.0
Foo.bar() duration: 40.0
Foo.bar() duration: 44.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 40.0
Foo.bar() duration: 42.0
Foo.bar() duration: 41.0
Foo.bar() duration: 42.0
Foo.bar() duration: 42.0
Foo.bar() duration: 43.0
Foo.bar() duration: 43.0
Run on MacBook Pro i9
What am I missing?