Да, это возможно!Но изолировать ядро процессора, чтобы оно не было заблокировано каким-либо пользователем или процессом ядра , является конфигурацией ОС, не связанной с вашим приложением .После этого вы можете использовать библиотеку сродства потоков, такую как CoralThreads , чтобы закрепить ваш поток на изолированном ядре процессора.Это значительно уменьшает дисперсию.Ниже приведен простой пример кода, чтобы вы поняли:
import com.coralblocks.coralthreads.Affinity;
public class Basics {
public static void main(String[] args) throws Exception {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// must be the first thing inside the run method
Affinity.bind();
try {
while(true) {
// do whatever you want here...
}
} finally {
// must be the last thing inside the run method
Affinity.unbind();
}
}
}, "MyPinnedThread");
System.out.println();
Affinity.printSituation(); // nothing done yet...
// assign thread to processor:
int procToBind = Integer.parseInt(args[0]);
Affinity.assignToProcessor(procToBind, thread);
Affinity.printSituation(); // now you see it there...
// start the thread!
thread.start();
Affinity.printSituation(); // now it is running with a pid...
}
}
Вывод:
$ java -cp coralthreads-all.jar com.coralblocks.coralthreads.sample.Basics 2
CpuInfo: [nChips=1, nCoresPerChip=4, hyper-threading=true, nProcessors=8, procIds=0,1,2,3,4,5,6,7]
Chip-0:
Core-0:
Processor-0: free
Processor-4: free
Core-1:
Processor-1: free
Processor-5: free
Core-2:
Processor-2: free
Processor-6: free
Core-3:
Processor-3: free
Processor-7: free
CpuInfo: [nChips=1, nCoresPerChip=4, hyper-threading=true, nProcessors=8, procIds=0,1,2,3,4,5,6,7]
Chip-0:
Core-0:
Processor-0: free
Processor-4: free
Core-1:
Processor-1: free
Processor-5: free
Core-2:
Processor-2: assigned to MyPinnedThread (not-started)
Processor-6: free
Core-3:
Processor-3: free
Processor-7: free
CpuInfo: [nChips=1, nCoresPerChip=4, hyper-threading=true, nProcessors=8, procIds=0,1,2,3,4,5,6,7]
Chip-0:
Core-0:
Processor-0: free
Processor-4: free
Core-1:
Processor-1: free
Processor-5: free
Core-2:
Processor-2: bound to MyPinnedThread (running pid=2180)
Processor-6: free
Core-3:
Processor-3: free
Processor-7: free