Java Thread Affinity supports groups of threads.
Join the DZone community and get the full member experience.
Join For Free
The Java Thread Affinity Library version 1.3, supports assigning groups of threads together by Socket, Core, or a custom strategy.
Determining the grouping of threads
The following Affinity Lock binding example, shows how you can choose to take either different sockets or cores, or share the same sockets or cores.It creates a thread lock for "main". For the reader and writer threads it tries to get a different socket or core to "main", and reserve a cpu on the same core or socket as each other.
AffinityLock al = AffinityLock.acquireLock(); try { // find a cpu on a different socket, otherwise a different core. AffinityLock readerLock = al.acquireLock(DIFFERENT_SOCKET, DIFFERENT_CORE); new Thread(new SleepRunnable(readerLock), "reader").start(); // find a cpu on the same core, or the same socket, or any free cpu. AffinityLock writerLock = readerLock.acquireLock(SAME_CORE, SAME_SOCKET, ANY); new Thread(new SleepRunnable(writerLock), "writer").start(); Thread.sleep(200); } finally { al.release(); } // re-use the same cpu for the engine. new Thread(new SleepRunnable(al), "engine").start();When this runs you can see that reader gets cpu 6 which is on a different core to main on cpu 7, however writer is on cpu 2 which is another thread on the same core as reader.
Jan 12, 2012 2:58:56 PM vanilla.java.affinity.AffinityLock bind INFO: Assigning cpu 7 to Thread[main,5,main] Jan 12, 2012 2:58:56 PM vanilla.java.affinity.AffinityLock bind INFO: Assigning cpu 6 to Thread[reader,5,main] Jan 12, 2012 2:58:56 PM vanilla.java.affinity.AffinityLock bind INFO: Assigning cpu 2 to Thread[writer,5,main] Jan 12, 2012 2:58:56 PM vanilla.java.affinity.AffinityLock release INFO: Releasing cpu 7 from Thread[main,5,main] Jan 12, 2012 2:58:56 PM vanilla.java.affinity.AffinityLock bind INFO: Assigning cpu 7 to Thread[engine,5,main] The assignment of CPUs is 0: General use CPU 1: General use CPU 2: Thread[writer,5,main] alive=true 3: Reserved for this application 4: General use CPU 5: General use CPU 6: Thread[reader,5,main] alive=true 7: Thread[engine,5,main] alive=true Jan 12, 2012 2:58:57 PM vanilla.java.affinity.AffinityLock release INFO: Releasing cpu 6 from Thread[reader,5,main] Jan 12, 2012 2:58:57 PM vanilla.java.affinity.AffinityLock release INFO: Releasing cpu 2 from Thread[writer,5,main] Jan 12, 2012 2:58:57 PM vanilla.java.affinity.AffinityLock release INFO: Releasing cpu 7 from Thread[engine,5,main]
From http://vanillajava.blogspot.com/2012/01/java-thread-affinity-supports-groups-of.html
Java (programming language)
Opinions expressed by DZone contributors are their own.
Comments