1. The Disruptor
High Performance Inter-Thread Messaging
Michael Barker @mikeb2701
Lead Developer
LMAX
Thursday, 17 November 11
2. Mo’vember
• Apologies for the silly facial hair
• Raising money for men’s health
• Donate!!!
http://mobro.co/mikeb2701
2
Thursday, 17 November 11
3. What is the
Disruptor?
http://code.google.com/p/disruptor
Thursday, 17 November 11
4. static long foo = 0;
private static void increment() {
for (long l = 0; l < 500000000L; l++) {
foo++;
}
}
Thursday, 17 November 11
5. public static long foo = 0;
public static Lock lock = new Lock();
private static void increment() {
int iterations = 500000000L / THREADS;
for (long l = 0; l < iterations; l++){
lock.lock();
try {
foo++;
} finally {
lock.unlock();
}
}
}
Thursday, 17 November 11
6. static AtomicLong foo = new AtomicLong(0);
private static void increment() {
int iterations = 500000000L / THREADS;
for (long l = 0; l < iterations; l++) {
foo.getAndIncrement();
}
}
Thursday, 17 November 11
7. Increment a counter 500 000 000 times.
• One Thread : 300 ms
Thursday, 17 November 11
8. Increment a counter 500 000 000 times.
• One Thread : 300 ms
• One Thread (volatile): 4 700 ms (15x)
Thursday, 17 November 11
9. Increment a counter 500 000 000 times.
• One Thread : 300 ms
• One Thread (volatile): 4 700 ms (15x)
• One Thread (Atomic) : 5 700 ms (19x)
Thursday, 17 November 11
10. Increment a counter 500 000 000 times.
• One Thread : 300 ms
• One Thread (volatile): 4 700 ms (15x)
• One Thread (Atomic) : 5 700 ms (19x)
• One Thread (Lock) : 10 000 ms (33x)
Thursday, 17 November 11
11. Increment a counter 500 000 000 times.
• One Thread : 300 ms
• One Thread (volatile): 4 700 ms (15x)
• One Thread (Atomic) : 5 700 ms (19x)
• One Thread (Lock) : 10 000 ms (33x)
• Two Threads (Atomic) : 17 000 ms (58x)
Thursday, 17 November 11
12. Increment a counter 500 000 000 times.
• One Thread : 300 ms
• One Thread (volatile): 4 700 ms (15x)
• One Thread (Atomic) : 5 700 ms (19x)
• One Thread (Lock) : 10 000 ms (33x)
• Two Threads (Atomic) : 17 000 ms (58x)
• Two Threads (Lock) : 104 000 ms (345x)
^^^^^^^^
> 1.5 minutes!!!
Thursday, 17 November 11