동시성 - 시스템이 여러 작업을 동시에 실행되는 것처럼 보이게 하는 것
병렬성 - 여러 작업을 실제로 동시에 수행하는 것
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);
}
댓글 없음:
댓글 쓰기