各優先順位で10個のスレッドを生成し、BigDecimalを50万回使用してpi(4 * atan(1)メソッド)を計算し、各スレッドで結合し、実行メソッドの経過時間を報告するクイックJavaプログラムを作成しました。ええ、prob'ly最良の例ではなく、それを基本的に保つ。LinuxのJVMは実際にスレッド優先順位を実装していますか?
の承知しているC言語で行うには非自明ですが、私たちはネイティブの優先順位はLinuxのJVMで設定されることはありませんと仮定することができますか?
$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 -XX:+UseThreadPriorities T
1:3112
2:2636
3:2662
4:3118
5:2870
6:3319
7:3412
8:3304
9:3299
10:3069
逸脱はあまりありません。それは小さな仮想Linuxマシン上にあった。たぶんサンだけ?私たちはIBM J9 VMを試してみます:
1:4091
2:4142
3:3957
4:3905
5:3984
6:3985
7:4130
8:4055
9:3752
10:4071
グロスの数字はかなりよく見えますが、スレッド優先度の観点からは数字にはスケールがありません。
のは、常にまれ7の下方のロードアベレージがロードされている古い日JVM、1と2.6カーネル上で500K回の反復を試してみましょう:
$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 -XX:+UseThreadPriorities T
1:63200
2:64388
3:62532
4:58529
5:62292
6:64872
7:64885
8:64584
9:61653
10:61575
がちょうど2.6カーネルで、実際のスラブ上のIBMのJ9を試してみましょうより大きいシステムなので、反復回数を200万に増やす予定です。
$uname -r && grep bogomips /proc/cpuinfo
2.6.9-78.ELsmp
bogomips : 5989.03
bogomips : 5985.03
bogomips : 5985.01
bogomips : 5985.02
bogomips : 5984.99
bogomips : 5985.02
bogomips : 5984.99
bogomips : 5985.02
$java -Xmx32m T # this is the IBM J9
1:1718
2:1569
3:1989
4:1897
5:1839
6:1688
7:1634
8:1552
9:2027
10:1522
スレッドやプロセスの優先度はまだまだわかりませんが、
Windowsボックスを試してみましょう。私は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
私たちが探しているものは何ですか?
Linux JVMのスレッド優先度はありません。私は、あなたがCのより低いレベルに本当に手を差し伸べることはできないと理解しますが、私はJVMエンジニアが低種別のディスパッチャーをどのように保つかを考えたと思います。
私もそれを考えました。 UseThreadPrioritiesでルートに切り替えることは何の影響もありませんでした。 しかしながら、ルートと 'として-XX:ThreadPriorityPolicy = 1 'yeilds:3587 3:3679 4:3223 5:2796 6:2686 7:2233 8:1895 1:3809 9:1759 10:= 0 ThreadPriorityPolicy値をと= 1はまた、あなたが、これは '他のコードスニペットから意味することになっている何 – Xailor
-XXを与える探している2311 SCHED_OTHER //動的優先度のみをサポートする ' – Schildmeijer