はじめに
#NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる
お勉強
#Arcやった- アークって呼んだほうがかっこよさそう
- 昨日のgoの勉強会で話してて思ったがRustは型で包んで表現することが多いなと思った
メモ
#なぜ全ての基本型がアトミックでなく、標準ライブラリの型も標準で
Arc<T>を使って実装されていないのか疑問に思う可能性があります。 その理由は、スレッド安全性が、本当に必要な時だけ支払いたいパフォーマンスの犠牲とともに得られるものだからです。
- ま、そうっすよねー
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let counter = Arc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter = Arc::clone(&counter);
let handle = thread::spawn(move || {
let mut num = counter.lock().unwrap();
*num += 1;
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
println!("Result: {}", *counter.lock().unwrap());
}
- 実装のトレイトが一緒で
useを変えるだけとかそんな感じであろう - Rustの気持ちになってきたな
単純な数値演算を行おうとしているなら、
Mutex<T>型よりも単純な、 標準ライブラリのstd::sync::atomicモジュールによって提供される型があることに注意してください。
- 別の型があるのだけ分かった
NO IMAGESyncとSendトレイトで拡張可能な並行性 - The Rust Programming Language 日本語版
- すげーいっぱいあるじゃん
面白いことに、Rust言語には、寡少な並行性機能があります。
- 全部これでいいじゃん
- まぁパフォーマンスがとか言われんだろな
でここまでに語った並行性機能のほとんどは、 標準ライブラリの一部であり、言語ではありません。
-
言語ではない?
- 言語に実装されてるわけではないという話か
-
んーなるほど
-
根本何をやっているかの話か
-
標準ライブラリなだけで別に
tokioみたいなcrateと扱いは変わらず、言語レベルで実装されている物の話をしてるな -
SendとSyncがあるらしい
まとめ
#Arcで安全に並行処理できるよね- でも遅くなるよというパフォーマンスの問題
- なんか当たり前って感じだった
つぎはここ
NO IMAGESyncとSendトレイトで拡張可能な並行性 - The Rust Programming Language 日本語版