کانال‌های محدود

با کانال‌های bounded (synchronous)، فرآیند send می‌تواند thread فعلی را مسدود کند:

use std::sync::mpsc;
use std::thread;
use std::time::Duration;

fn main() {
    let (tx, rx) = mpsc::sync_channel(3);

    thread::spawn(move || {
        let thread_id = thread::current().id();
        for i in 0..10 {
            tx.send(format!("Message {i}")).unwrap();
            println!("{thread_id:?}: sent Message {i}");
        }
        println!("{thread_id:?}: انجام شد");
    });
    thread::sleep(Duration::from_millis(100));

    for msg in rx.iter() {
        println!("Main: got {msg}");
    }
}
This slide should take about 8 minutes.
  • فراخوانی send تا زمانی که فضای کافی در کانال برای پیام جدید وجود داشته باشد، thread کنونی را مسدود می‌کند. اگر کسی از کانال چیزی نخواند آنگاه thread را می‌توان به طور نامحدود مسدود کرد.
  • اگر کانال بسته شود، تماس برای send با یک error قطع می‌شود (به همین دلیلResult را برمی‌گرداند. هنگامی که گیرنده از بین می رود یک کانال بسته می‌شود.
  • یک کانال محدود ( bounded channel) با اندازه صفر را "کانال ملاقات" یا "rendezvous channel" می‌‌نامند. هر ارسال، thread فعلی را مسدود می‌کند تا زمانی که رشته دیگری recv را فراخواند.