Я не уверен в Sun JVM в Linux. Написал быструю Java-прогу, чтобы породить 10 потоков с каждым приоритетом и вычислить число pi (4 * atan (1)) с BigDecimals 500 000 раз каждый, присоединиться к каждому потоку и сообщить прошедшее время для метода run. Да, возможно, это не лучший пример, но он остается базовым.
$uname -r && grep bogomips /proc/cpuinfo
2.4.33.3
bogomips : 4312.26
$java -version 2>&1 |head -1
Java version "1.6.0_01"
$javac T.java && java -Xmx32m T
1:3112
2:2636
3:2662
4:3118
5:2870
6:3319
7:3412
8:3304
9:3299
10:3069
Похоже, не так много отклонений, которые можно было бы ожидать! Это было на маленькой виртуальной машине Linux. Давайте попробуем это на реальной плите на всякий случай, эта коробка также довольно активна со средними значениями нагрузки редко ниже 7, давайте просто посмотрим, как мы планируем в такой среде:
$uname -r && grep bogomips /proc/cpuinfo
2.6.9-67.ELsmp
bogomips : 3992.93
bogomips : 3990.00
$java -version 2>&1 |head -1
java version "1.4.2_14"
$javac T.java && java -Xmx32m T
1:63200
2:64388
3:62532
4:58529
5:62292
6:64872
7:64885
8:64584
9:61653
10:61575
Хммм, здесь не так уж много вариаций, не знаю, будет ли 1.4 даже отображённым потоком. Давайте попробуем коробку окон. Я знаю, что Windows имеет довольно агрессивную схему приоритетов потоков. Все, что выше нормальное анекдоталия, потребляет намного больше. Таким образом, давайте увеличим до 900 000 итераций в каждом потоке:
C:\>java -version
java version "1.6.0_11"
C:\>java -Xmx32m T
1:12578
2:12625
3:11469
4:11453
5:10781
6:8937
7:10516
8:8406
9:9953
10:7391
Очень много, что мы ищем, нет?