ThreadRng Java рдореЗрдВ ThreadLocalRandom рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 5 рдЧреБрдирд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рд░рд╕реНрдЯ рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:
#[bench]
fn bench_rnd(b: &mut Bencher) {
b.iter(|| rand::thread_rng().gen_range::<f64>(2.0, 100.0));
}
рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг::рдмреЗрдВрдЪ_рд░рдВрдб ... рдмреЗрдВрдЪ: 49 рдПрдирдПрд╕/рдЗрдЯрд░ (+/- 1)
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЬреЗрдПрдЪрдПрдо рдкрд░ рдПрдХ рд╣реА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:
<strong i="12">@Benchmark</strong>
public double testRnd() {
return ThreadLocalRandom.current().nextDouble(2, 100);
}
рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЛрдб Cnt рд╕реНрдХреЛрд░ рддреНрд░реБрдЯрд┐ рдЗрдХрд╛рдЗрдпрд╛рдБ
Main.testRnd рдФрд╕рдд 20 9,018 ┬▒ 0,094 ns/op
рддреЛ рдкреНрд░рджрд░реНрд╢рди рдмрдЧ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдЕрдВрддрд░ 5.44 рдЧреБрдирд╛ рд╣реИред
рдЬрдВрдЧ:
рд░рдмреЛрд╕
рд░рд╕реНрдЯрд╕реА 1.20.0-рд░рд╛рдд рдореЗрдВ (c9bb93576 2017-06-24)
рдмрд╛рдЗрдирд░реА: рд░рд╕реНрдЯрд╕реА
рдкреНрд░рддрд┐рдмрджреНрдз-рд╣реИрд╢: c9bb93576d4484edd1b3c40eb2aea0dfa0788851
рдкреНрд░рддрд┐рдмрджреНрдз-рддрд╛рд░реАрдЦ: 2017-06-24
рд╣реЛрд╕реНрдЯ: x86_64-рдЕрдЬреНрдЮрд╛рдд-рд▓рд┐рдирдХреНрд╕-рдЧреНрдиреВ
рд░рд┐рд▓реАрдЬ: 1.20.0-рд░рд╛рдд рдореЗрдВ
рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рдВрд╕реНрдХрд░рдг: 4.0
рдЬрд╛рд╡рд╛:
рдУрдкрдирдЬреЗрдбреАрдХреЗ 1.8.131
рдЪреВрдВрдХрд┐ rand
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд╣рд░реА рдЯреЛрдХрд░рд╛ рд╣реИ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╢рд╛рдпрдж рд╡рд╣рд╛рдВ рд╣реИ , рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЬрдВрдЧ рдХреА рдЧрд▓рддреА рд╣реИ, рдФрд░ rand
рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рдкреНрд░рд╢реНрди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ? rand::ThreadRng
рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд░рдПрдирдЬреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд░рдПрдирдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдиреБрдХрд╕рд╛рди рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЙрддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ... "рдереНрд░реЗрдбрд▓реЛрдХрд▓ рд░реИрдВрдбрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред" рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЙрдЪрд┐рдд рддреБрд▓рдирд╛ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП 21ns/iter рд╣реИред
thread_rng()
рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ 15 ns/iter рдЧрддрд┐ рджреЗрддрд╛ рд╣реИред
#[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
рдПрдХ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд░реИрдЦрд┐рдХ рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдо PRNG рд╣реИ , рдЬрдмрдХрд┐ рд░рд╕реНрдЯ рдХрд╛ rand
рдХрд╛ thread_rng()
ISAAC (рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛) рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд PRNG рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЪреВрдВрдХрд┐
rand
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд╣рд░реА рдЯреЛрдХрд░рд╛ рд╣реИ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╢рд╛рдпрдж рд╡рд╣рд╛рдВ рд╣реИ , рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЬрдВрдЧ рдХреА рдЧрд▓рддреА рд╣реИ, рдФрд░rand
рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИредрд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рдкреНрд░рд╢реНрди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ?
rand::ThreadRng
рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд░рдПрдирдЬреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд░рдПрдирдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдиреБрдХрд╕рд╛рди рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЙрддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ... "рдереНрд░реЗрдбрд▓реЛрдХрд▓ рд░реИрдВрдбрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред" рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЙрдЪрд┐рдд рддреБрд▓рдирд╛ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВредрд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП 21ns/iter рд╣реИред
thread_rng()
рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ 15 ns/iter рдЧрддрд┐ рджреЗрддрд╛ рд╣реИредрдЕрдЧрд░ рдореИрдВ
weak_rng()
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ 3 рдПрдирдПрд╕/рдЗрдЯрд░ рддрдХ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред