ThreadRng Π² Java ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² 5 ΡΠ°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ThreadLocalRandom.
Π― Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΡΠΎΡ ΡΠ΅ΡΡ Π² Rust:
#[bench]
fn bench_rnd(b: &mut Bencher) {
b.iter(|| rand::thread_rng().gen_range::<f64>(2.0, 100.0));
}
ΠΠ° ΠΌΠΎΠ΅ΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
test tests :: bench_rnd ... bench: 49 Π½Ρ / ΠΈΡΠ΅Ρ (+/- 1)
ΠΠΎ Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠ²Π΅Π΄Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΡΡ Π½Π° JHM:
<strong i="12">@Benchmark</strong>
public double testRnd() {
return ThreadLocalRandom.current().nextDouble(2, 100);
}
ΠΠ° ΠΌΠΎΠ΅ΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠ΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Cnt Score
Main.testRnd avgt 20 9,018 Β± 0,094 Π½Ρ / ΠΎΠΏ
Π’Π°ΠΊ ΡΡΠΎ ΡΠ°Π·Π½ΠΈΡΠ° Π² 5,44 ΡΠ°Π·Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
Π ΠΆΠ°Π²ΡΠΈΠ½Π°:
rbose
rustc 1.20.0-nightly (c9bb93576 24.06.2017)
Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ: rustc
ΠΊΠΎΠΌΠΌΠΈΡ-Ρ
Π΅Ρ: c9bb93576d4484edd1b3c40eb2aea0dfa0788851
ΠΠ°ΡΠ° ΡΠΈΠΊΡΠ°ΡΠΈΠΈ: 2017-06-24
Ρ
ΠΎΡΡ: x86_64-unknown-linux-gnu
ΡΠ΅Π»ΠΈΠ·: 1.20.0-Π½ΠΎΡΡ
ΠΠ΅ΡΡΠΈΡ LLVM: 4.0
ΠΠΆΠ°Π²Π°:
OpenJDK 1.8.131
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ rand
- ΡΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΡΠΈΠΊ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ, ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π½Π΅ΠΌΡ , Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Rust, Π° Π½Π΅ ΠΎΡΠΈΠ±ΠΊΠ° rand
.
ΠΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°ΡΡ: ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠΈΡΠ»Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅? rand::ThreadRng
- ΡΡΠΎ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΠ‘Π§, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΠ‘Π§, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ. ΠΠ»ΡΠ΄Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ... Β«ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ThreadLocalRandom Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈΒ», ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅ΡΡΠ½ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠ°, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 21 Π½Ρ / ΠΈΡΠ΅Ρ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠ° Π΄Π»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° thread_rng()
Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΊΠΎΡΡΠ΅Ρ Π΅Π³ΠΎ Π½Π° 15 Π½Ρ / Π».
#[bench]
fn bench_rnd(b: &mut Bencher) {
let mut rng = rand::thread_rng();
b.iter(|| rng.gen_range::<f64>(2.0, 100.0));
}
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ weak_rng()
ΠΈ ΠΎΡΠΊΠ°ΠΆΡΡΡ ΠΎΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΡΠΈΡΡ, ΠΎΠ½Π° Π²ΡΡΠ°ΡΡΠ΅Ρ Π΄ΠΎ 3 Π½Ρ / Π».
#[bench]
fn bench_rnd(b: &mut Bencher) {
let mut rng = rand::weak_rng();
b.iter(|| rng.gen_range::<f64>(2.0, 100.0));
}
Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ThreadLocalRandom
Java - ΡΡΠΎ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΊΠΎΠ½Π³ΡΡΡΠ½ΡΠ½ΡΠΉ ΠΠΠ‘Π§ , Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ rand
thread_rng()
Rust ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΌ ΠΠΠ‘Π§ ISAAC (Π·Π°ΡΠ²Π»Π΅Π½Π½ΡΠΉ ΠΊΠ°ΠΊ), ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ Π΄ΠΎΡΠΎΠΆΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎΡ ΡΠ΅ΡΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ±Π»ΠΎΠΊ Ρ ΡΠ±Π»ΠΎΠΊΠ°ΠΌΠΈ.
ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ
rand
- ΡΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΡΠΈΠΊ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ, ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π½Π΅ΠΌΡ , Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Rust, Π° Π½Π΅ ΠΎΡΠΈΠ±ΠΊΠ°rand
.ΠΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄Π°ΡΡ: ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠΈΡΠ»Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅?
rand::ThreadRng
- ΡΡΠΎ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΠ‘Π§, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΠ‘Π§, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ. ΠΠ»ΡΠ΄Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ... Β«ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ThreadLocalRandom Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈΒ», ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅ΡΡΠ½ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅.ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠ°, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 21 Π½Ρ / ΠΈΡΠ΅Ρ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠ° Π΄Π»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
thread_rng()
Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΊΠΎΡΡΠ΅Ρ Π΅Π³ΠΎ Π½Π° 15 Π½Ρ / Π».ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
weak_rng()
ΠΈ ΠΎΡΠΊΠ°ΠΆΡΡΡ ΠΎΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°ΡΠΈΡΡ, ΠΎΠ½Π° Π²ΡΡΠ°ΡΡΠ΅Ρ Π΄ΠΎ 3 Π½Ρ / Π».