Многопоточность
Многопоточное программирование, когда разные части программы выполняются независимо,
Note
Используя владение и проверку типов, многие ошибки многопоточности являются ошибками времени компиляции в Rust, а не ошибками времени выполнения.
Rust использует модель реализации потоков 1:1, при которой одному потоку операционной системы соответствует ровно один "языковой" поток.
Создание нового потока с помощью spawn
use std::thread; use std::time::Duration; fn main() { thread::spawn(|| { //создание потока for i in 1..10 { println!("hi number {i} from the spawned thread!"); thread::sleep(Duration::from_millis(1)); } }); for i in 1..5 { println!("hi number {i} from the main thread!"); thread::sleep(Duration::from_millis(1)); } }
thread::spawn(|| {— создание потокаthread::sleep(— задержка потокаjoin— дождаться завершения всех потоковhandle.join().unwrap();
join отстанавливает выполнение потока до завершения потока с указателем
handle.join().unwrap();
Использование move-замыканий в потоках
use std::thread; fn main() { let v = vec![1, 2, 3]; let handle = thread::spawn(move || { println!("Here's a vector: {v:?}"); }); handle.join().unwrap(); }
нужно передать во владение переменную в поток