https://www.tutorialspoint.com/rust/rust_concurrency.htm
concurrent programming에서는 프로그램의 각각 다른 부분은 독립적으로 실행
반면 parallel programming에서는 프로그램의 다른 부분이 동시에 실행
두 모델 모두 똑같이 중요
스레드를 사용하여 코드를 동시에 실행할 수 있음
현재 운영 체제에서는 실행되는 프로그램의 코드가 프로세스에서 실행되고 운영 체제는 여러 프로세스를 한 번에 관리
프로그램 내에서 동시에 실행되는 독립적인 부분을 작성할 수 있음
이것을 thread라고 지칭
thread::spawn 함수는 새 스레드를 생성하는 데 사용
thread::spawn 함수는 스레드가 실행해야 하는 코드를 정의 하는 클로저를 매개변수로 사용
//import the necessary modules
use std::thread;
use std::time::Duration;
fn main() {
//create a new thread
thread::spawn(|| {
for i in 1..10 {
println!("hi number {} from the spawned thread!", i);
thread::sleep(Duration::from_millis(1));
}
});
//code executed by the main thread
for i in 1..5 {
println!("hi number {} from the main thread!", i);
thread::sleep(Duration::from_millis(1));
}
}
새 스레드는 메인 스레드가 종료되면 중지됨
thread::sleep 함수는 스레드가 짧은 기간 동안 실행을 중지하도록 하여 다른 스레드가 실행되도록 함
메인 스레드가 먼저 종료되면 생성된 스레드는 끝까지 실행되지 않을 수 있음
thread::spawn 함수는 JoinHandle을 반환
JoinHandle의 join() 메서드는 연결된 스레드가 완료될 때까지 대기
use std::thread;
use std::time::Duration;
fn main() {
let handle = thread::spawn(|| {
for i in 1..10 {
println!("hi number {} from the spawned thread!", i);
thread::sleep(Duration::from_millis(1));
}
});
for i in 1..5 {
println!("hi number {} from the main thread!", i);
thread::sleep(Duration::from_millis(1));
}
handle.join().unwrap();
}