我有一个库在Linux和Windows上支持Java中的线程关联。 https://github.com/peter-lawrey/Java-Thread-Affinity
如果隔离CPU,则可以确保您分配的CPU不会用于其他任何内容(非屏蔽中断除外)这在Linux AFAIK中效果最佳。
如果您使用非阻塞NIO忙于等待阻塞IO,则可以获得较低延迟结果。后者在负载下工作得最好,在较低负载下延迟可以增加。
你可能会发现这个库很有趣https://github.com/peter-lawrey/Java-Chronicle它允许你每秒钟持有数百万条消息,可选择到第二个进程。
BTW:线程优先级只是一个暗示,该操作系统是免费的忽略它(常常)
一个简单的例子VS冷码比较温暖。它所做的只是重复复制一个数组并重新定时。一旦代码和数据变暖,你不会期望它会变慢,但所需要的只是一个10毫秒的延迟,即使是在一台相当的机器上,也可以显着减缓复制所需的时间。
public static void main(String... args) throws InterruptedException {
int[] from = new int[60000], to = new int[60000];
for (int i = 0; i < 10; i++)
copy(from, to); // warm up
for (int i = 0; i < 10; i++) {
long start = System.nanoTime();
copy(from, to);
long time = System.nanoTime() - start;
System.out.printf("Warm copy %,d us%n", time/1000);
}
for (int i = 0; i < 10; i++) {
Thread.sleep(10);
long start = System.nanoTime();
copy(from, to);
long time = System.nanoTime() - start;
System.out.printf("Cold copy %,d us%n", time/1000);
}
}
private static void copy(int[] a, int[] b) {
for (int i = 0, len = a.length; i < len; i++)
b[i] = a[i];
}
打印
Warm copy 20 us
Warm copy 20 us
Warm copy 19 us
Warm copy 23 us
Warm copy 20 us
Warm copy 20 us
Cold copy 100 us
Cold copy 80 us
Cold copy 89 us
Cold copy 92 us
Cold copy 80 us
Cold copy 112 us
[看这篇文章](http://stackoverflow.com/questions/2238272/java-thread-affinity),这是关于一种设置线程的处理器亲和力,当你使用Java,虽然它是真的使用JNI来完成这项工作。 – 2012-08-09 17:30:02
您希望有两个线程处理所有网络流量。至多会使用100%的两个内核。你在100%运行四个内核,所以从这里的信息看,你可能没有问题。是什么让你觉得你有问题? – 2012-08-09 17:49:20
抱歉不明确。新流量目前由8个线程处理,并且它们不会消耗超过100%的cpu。 400%是整个应用程序负载。我想通过使用单个(或2个)异步nw线程来减少线程数量。 – user1588261 2012-08-09 17:59:28