LINUX.ORG.RU

История изменений

Исправление steemandlinux, (текущая версия) :

У вас debug для ржавого включен. И у меня на атомиках ржавой быстрее на 20%:

use std::sync::{
    Arc,
    atomic::{AtomicUsize, Ordering},
};
use std::thread;

fn main() {
    let counter = Arc::new(AtomicUsize::new(0));
    let mut handles = Vec::new();

    for _ in 0..4 {
        let c = Arc::clone(&counter);
        handles.push(thread::spawn(move || {
            for _ in 0..1_000_000 {
                c.fetch_add(1, Ordering::Relaxed);
            }
        }));
    }

    for h in handles { h.join().unwrap(); }

    println!("counter = {}", counter.load(Ordering::Relaxed));
}
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"


[package]
name = "atomics-rust"
version = "0.1.0"
edition = "2021"

[dependencies]

40 ms против 50 ms.

А ещё размер таким образом нечестно сравнивать. У него свой std.

Исправление steemandlinux, :

У вас debug для ржавого включен. И у меня на атомиках ржавой быстрее на 20%:

use std::sync::{
    Arc,
    atomic::{AtomicUsize, Ordering},
};
use std::thread;

fn main() {
    let counter = Arc::new(AtomicUsize::new(0));
    let mut handles = Vec::new();

    for _ in 0..4 {
        let c = Arc::clone(&counter);
        handles.push(thread::spawn(move || {
            for _ in 0..1_000_000 {
                c.fetch_add(1, Ordering::Relaxed);
            }
        }));
    }

    for h in handles { h.join().unwrap(); }

    println!("counter = {}", counter.load(Ordering::Relaxed));
}
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"


[package]
name = "atomics-rust"
version = "0.1.0"
edition = "2021"

[dependencies]

40 ms против 50 ms.

А ещё размер таким образом нечестно сравнивать.

Исправление steemandlinux, :

У вас debug для ржавого включен. И у меня на атомиках ржавой быстрее на 20%:

use std::sync::{
    Arc,
    atomic::{AtomicUsize, Ordering},
};
use std::thread;

fn main() {
    let counter = Arc::new(AtomicUsize::new(0));
    let mut handles = Vec::new();

    for _ in 0..4 {
        let c = Arc::clone(&counter);
        handles.push(thread::spawn(move || {
            for _ in 0..1_000_000 {
                c.fetch_add(1, Ordering::Relaxed);
            }
        }));
    }

    for h in handles { h.join().unwrap(); }

    println!("counter = {}", counter.load(Ordering::Relaxed));
}
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"


[package]
name = "atomics-rust"
version = "0.1.0"
edition = "2021"

[dependencies]

40 ms против 50 ms.

Исправление steemandlinux, :

У вас debug для ржавого включен. И у меня на атомиках ржавой быстрее на 20%:

use std::sync::{
    Arc,
    atomic::{AtomicUsize, Ordering},
};
use std::thread;

fn main() {
    let counter = Arc::new(AtomicUsize::new(0));
    let mut handles = Vec::new();

    for _ in 0..4 {
        let c = Arc::clone(&counter);
        handles.push(thread::spawn(move || {
            for _ in 0..1_000_000 {
                c.fetch_add(1, Ordering::Relaxed);
            }
        }));
    }

    for h in handles { h.join().unwrap(); }

    println!("counter = {}", counter.load(Ordering::Relaxed));
}
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"


[package]
name = "atomics-rust"
version = "0.1.0"
edition = "2021"

[dependencies]

Исходная версия steemandlinux, :

У вас debug для ржавого включен.