Rust - Concurrency

Mickey·2022년 1월 15일
0

Rust

목록 보기
29/32
post-thumbnail
post-custom-banner

https://www.tutorialspoint.com/rust/rust_concurrency.htm

concurrent programming에서는 프로그램의 각각 다른 부분은 독립적으로 실행
반면 parallel programming에서는 프로그램의 다른 부분이 동시에 실행
두 모델 모두 똑같이 중요

Thread

스레드를 사용하여 코드를 동시에 실행할 수 있음
현재 운영 체제에서는 실행되는 프로그램의 코드가 프로세스에서 실행되고 운영 체제는 여러 프로세스를 한 번에 관리
프로그램 내에서 동시에 실행되는 독립적인 부분을 작성할 수 있음
이것을 thread라고 지칭

Creating a 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 함수는 스레드가 짧은 기간 동안 실행을 중지하도록 하여 다른 스레드가 실행되도록 함

JoinHandle

메인 스레드가 먼저 종료되면 생성된 스레드는 끝까지 실행되지 않을 수 있음
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();
}

profile
Mickey
post-custom-banner

0개의 댓글