Skip to content

Commit 8deae2e

Browse files
committed
Add the ability to bind groups of threads by sockets or by core.
1 parent fc12b8d commit 8deae2e

5 files changed

Lines changed: 13 additions & 9 deletions

File tree

README

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
[ Version History ]
22

3+
Version 1.3 - Support thread layout strategies for using the same/different socket or cores.
4+
35
Version 1.2.2 - Improve logging and handling of edge cases
46

57
Version 1.2.1 - Fix a critical bug and added a unit test.

src/main/java/vanilla/java/affinity/AffinityLock.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,12 @@ public static AffinityLock acquireLock() {
7575
}
7676

7777
public static AffinityLock acquireLock(boolean bind) {
78-
return acquireLock(bind, 0, AffinityAssignmentStrategies.ANY);
78+
return acquireLock(bind, 0, AffinityStrategies.ANY);
7979
}
8080

81-
private static AffinityLock acquireLock(boolean bind, int cpuId, AffinityAssignmentStrategy... strategies) {
81+
private static AffinityLock acquireLock(boolean bind, int cpuId, AffinityStrategy... strategies) {
8282
synchronized (AffinityLock.class) {
83-
for (AffinityAssignmentStrategy strategy : strategies) {
83+
for (AffinityStrategy strategy : strategies) {
8484
for (int i = PROCESSORS - 1; i > 0; i--) {
8585
AffinityLock al = LOCKS[i];
8686
if (al.canReserve() && strategy.matches(cpuId, i)) {
@@ -155,7 +155,7 @@ private boolean canReserve() {
155155
return true;
156156
}
157157

158-
public AffinityLock acquireLock(AffinityAssignmentStrategy... strategies) {
158+
public AffinityLock acquireLock(AffinityStrategy... strategies) {
159159
return acquireLock(false, id, strategies);
160160
}
161161

src/main/java/vanilla/java/affinity/AffinityAssignmentStrategies.java renamed to src/main/java/vanilla/java/affinity/AffinityStrategies.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/**
44
* @author peter.lawrey
55
*/
6-
public enum AffinityAssignmentStrategies implements AffinityAssignmentStrategy {
6+
public enum AffinityStrategies implements AffinityStrategy {
77
ANY {
88
@Override
99
public boolean matches(int cpuId, int cpuId2) {

src/main/java/vanilla/java/affinity/AffinityAssignmentStrategy.java renamed to src/main/java/vanilla/java/affinity/AffinityStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/**
44
* @author peter.lawrey
55
*/
6-
public interface AffinityAssignmentStrategy {
6+
public interface AffinityStrategy {
77
/**
88
* @param cpuId to cpudId to compare
99
* @param cpuId2 with a second cpuId

src/test/java/vanilla/java/affinity/AffinityLockBindMain.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package vanilla.java.affinity;
1818

19+
import static vanilla.java.affinity.AffinityStrategies.*;
20+
1921
/**
2022
* @author peter.lawrey
2123
*/
@@ -24,16 +26,16 @@ public static void main(String... args) throws InterruptedException {
2426
AffinityLock al = AffinityLock.acquireLock();
2527
try {
2628
// find a cpu on a different socket, otherwise a different core.
27-
AffinityLock readerLock = al.acquireLock(AffinityAssignmentStrategies.DIFFERENT_SOCKET, AffinityAssignmentStrategies.DIFFERENT_CORE);
29+
AffinityLock readerLock = al.acquireLock(DIFFERENT_SOCKET, DIFFERENT_CORE);
2830
new Thread(new SleepRunnable(readerLock), "reader").start();
2931
// find a cpu on the same core, or the same socket, or any free cpu.
30-
AffinityLock writerLock = readerLock.acquireLock(AffinityAssignmentStrategies.SAME_CORE, AffinityAssignmentStrategies.SAME_SOCKET, AffinityAssignmentStrategies.ANY);
32+
AffinityLock writerLock = readerLock.acquireLock(SAME_CORE, SAME_SOCKET, ANY);
3133
new Thread(new SleepRunnable(writerLock), "writer").start();
3234
Thread.sleep(200);
3335
} finally {
3436
al.release();
3537
}
36-
// re-use the same cpu for the engine.
38+
// re-use the same cpu for the engine.
3739
new Thread(new SleepRunnable(al), "engine").start();
3840

3941
Thread.sleep(200);

0 commit comments

Comments
 (0)