]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/PerformanceTests.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / PerformanceTests.java
diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/PerformanceTests.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/PerformanceTests.java
new file mode 100644 (file)
index 0000000..657e8a2
--- /dev/null
@@ -0,0 +1,380 @@
+package org.simantics.db.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.concurrent.BlockingQueue;\r
+import java.util.concurrent.ConcurrentLinkedQueue;\r
+import java.util.concurrent.CountDownLatch;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+import java.util.concurrent.atomic.AtomicInteger;\r
+import java.util.concurrent.locks.ReentrantLock;\r
+\r
+public class PerformanceTests {\r
+\r
+       \r
+       public static void collectionTest1() {\r
+\r
+               final BlockingQueue<Object> queue = new LinkedBlockingQueue<Object>();\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) queue.add(this);\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       start = System.nanoTime();\r
+                       ArrayList<Object> sink = new ArrayList<Object>();\r
+                       queue.drainTo(sink);\r
+                       done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+       \r
+       public static void collectionTest2() {\r
+\r
+               final ConcurrentLinkedQueue<Object> queue = new ConcurrentLinkedQueue<Object>();\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) queue.add(this);\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       start = System.nanoTime();\r
+                       ArrayList<Object> sink = new ArrayList<Object>();\r
+                       for(Object o : queue) sink.add(o);\r
+                       done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+\r
+       public static void collectionTest3() {\r
+\r
+               final ArrayList<Object> queue = new ArrayList<Object>();\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) {\r
+                                       synchronized(queue) {\r
+                                               queue.add(this);\r
+                                       }\r
+                               }\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       start = System.nanoTime();\r
+                       ArrayList<Object> sink = new ArrayList<Object>();\r
+                       sink.addAll(queue);\r
+                       done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+\r
+       public static void collectionTest4() {\r
+\r
+               final ArrayList<Object> queue = new ArrayList<Object>();\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               final ReentrantLock lock = new ReentrantLock();\r
+               final ReentrantLock lock2 = new ReentrantLock();\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) {\r
+                                       lock.lock();\r
+                                       queue.add(this);\r
+                                       lock.unlock();\r
+                                       lock2.tryLock();\r
+                               }\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       start = System.nanoTime();\r
+                       ArrayList<Object> sink = new ArrayList<Object>();\r
+                       sink.addAll(queue);\r
+                       done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+\r
+       public static void counterTest1() {\r
+\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               final AtomicInteger integer = new AtomicInteger();\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) {\r
+                                       integer.incrementAndGet();\r
+                               }\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+\r
+       static int counter = 0;\r
+       \r
+       public static void counterTest2() {\r
+\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               final ReentrantLock lock = new ReentrantLock();\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) {\r
+                                       lock.lock();\r
+                                       counter++;\r
+                                       lock.unlock();\r
+                               }\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+\r
+       public static void counterTest3() {\r
+\r
+               final CountDownLatch latch1 = new CountDownLatch(9);\r
+               final CountDownLatch latch2 = new CountDownLatch(9);\r
+               //final ReentrantLock lock = new ReentrantLock();\r
+               \r
+               class T extends Thread {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               try {\r
+                                       latch1.countDown();\r
+                                       latch1.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                               for(int i=0;i<500000;i++) {\r
+                                       //lock.lock();\r
+                                       counter++;\r
+                                       //lock.unlock();\r
+                               }\r
+                               try {\r
+                                       latch2.countDown();\r
+                                       latch2.await();\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               \r
+\r
+               for(int i=0;i<8;i++) new T().start();\r
+               \r
+               try {\r
+                       latch1.countDown();\r
+                       latch1.await();\r
+                       long start = System.nanoTime();\r
+                       latch2.countDown();\r
+                       latch2.await();\r
+                       long done = System.nanoTime() - start;\r
+                       System.out.println("took " + 1e-9*done);\r
+                       \r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+       }\r
+       \r
+       public static void main(String[] args) {\r
+//             collectionTest1();\r
+//             collectionTest2();\r
+//             collectionTest3();\r
+//             collectionTest4();\r
+               counterTest3();\r
+       }\r
+       \r
+}\r