2025년 4월 16일 수요일

5-1-1강: 동시성 중 thread, mpsc

동시성 - 시스템이 여러 작업을 동시에 실행되는 것처럼 보이게 하는 것

병렬성 - 여러 작업을 실제로 동시에 수행하는 것

thread : 스레드를 생성하고 제어
use std::fs::File;
use std::io::{BufReader, BufRead};
use std::thread;

fn main() {
    // 새로운 스레드를 생성하고, 그 핸들을 받기
    let handle = thread::spawn(|| {
        //"file.txt" 파일 열기
        let file = File::open("file.txt").unwrap();

        // 버퍼링을 사용해 파일 읽기
        let reader = BufReader::new(file);

        // 파일의 각 줄을 읽어오기
        for line in reader.lines() {
            // 각 줄의 텍스트 읽기
            let txt = line.unwrap();
            println!("{}", txt);
        }
    });

    // 스레드가 끝날 때까지 대기
    // 스레드가 종료되면 join() 메서드가 호출됨
    match handle.join() {
        Ok(_) => {},
        Err(e) => {
            println!("스레드 내부에서 오류가 발생했습니다. {:?}", e);
        }
    };
}
mpsc : 채널을 생성하여 여러 스레드의 데이터를 공유
fn main() {
    //mpsc 채널 생성 tx는 송신자, rx는 수신자
    let (tx1, rx) = mpsc::channel();
    let tx2 = mpsc::Sender::clone(&tx1); // tx1복제

    // 1부터 50까지의 합
    thread::spawn(move || {
        let mut sum = 0;

        for i in 1..=50 {
            sum = sum + i;
        }

        tx1.send(sum).unwrap();
    });

    // 51부터 100까지의 합
    thread::spawn(move || {
        let mut sum = 0;

        for i in 51..=100 {
            sum = sum + i;
        }

        tx2.send(sum).unwrap();
    });

    let mut sum = 0;
   
    for val in rx {
        println!("수신: {}", val);
        sum = sum + val;
    }

    println!("1부터 100까지의 합: {}", sum);
}

댓글 없음:

댓글 쓰기