Async Rust: Đâu là nơi sống của trình lập lịch?

tsudev· 07/10/2026

Giới thiệu về lập trình không đồng bộ trong Rust

Lập trình không đồng bộ (async) là một tính năng quan trọng trong Rust, cho phép các chương trình thực hiện nhiều tác vụ cùng lúc mà không bị tắc nghẽn. Tuy nhiên, để quản lý các tác vụ này, chúng ta cần một thành phần quan trọng gọi là trình lập lịch (scheduler). Trình lập lịch quyết định khi nào và làm thế nào để chạy từng tác vụ, giúp tối ưu hóa hiệu suất và giảm thiểu thời gian chờ đợi.

Trình lập lịch trong Rust

Trong Rust, trình lập lịch không phải là một phần của ngôn ngữ cơ bản, mà thay vào đó, nó được cung cấp bởi các thư viện và framework khác nhau. Một số thư viện phổ biến như Tokio, async-std và smol cung cấp các trình lập lịch khác nhau để quản lý các tác vụ không đồng bộ. Mỗi thư viện có cách tiếp cận riêng về việc quản lý và chạy các tác vụ, nhưng tất cả đều có mục tiêu chung là cung cấp một cách thức hiệu quả để chạy các chương trình không đồng bộ.

Nơi sống của trình lập lịch

Vậy, đâu là nơi sống của trình lập lịch trong lập trình Rust không đồng bộ? Câu trả lời là trình lập lịch sống trong runtime của ứng dụng. Khi một chương trình Rust không đồng bộ được chạy, trình lập lịch sẽ được khởi tạo và bắt đầu quản lý các tác vụ. Trình lập lịch sẽ quyết định khi nào để chạy từng tác vụ, dựa trên các yếu tố như ưu tiên, thời gian chờ đợi và các ràng buộc khác.

Ví dụ về sử dụng trình lập lịch trong Tokio

Dưới đây là một ví dụ đơn giản về sử dụng trình lập lịch trong Tokio:
rust
use tokio::prelude::*;

#[tokio::main]
async fn main() {
    let handle = tokio::spawn(async {
        println!("Tác vụ 1 đang chạy");
        tokio::time::sleep(std::time::Duration::from_millis(100)).await;
        println!("Tác vụ 1 đã hoàn thành");
    });

    let handle2 = tokio::spawn(async {
        println!("Tác vụ 2 đang chạy");
        tokio::time::sleep(std::time::Duration::from_millis(50)).await;
        println!("Tác vụ 2 đã hoàn thành");
    });

    handle.await.unwrap();
    handle2.await.unwrap();
}
Trong ví dụ này, chúng ta sử dụng tokio::spawn để tạo ra hai tác vụ không đồng bộ. Trình lập lịch của Tokio sẽ quyết định khi nào để chạy từng tác vụ, dựa trên thời gian chờ đợi và các ràng buộc khác.

Kết luận

Tóm lại, trình lập lịch là một thành phần quan trọng trong lập trình Rust không đồng bộ, giúp quản lý và chạy các tác vụ không đồng bộ một cách hiệu quả. Trình lập lịch sống trong runtime của ứng dụng và quyết định khi nào để chạy từng tác vụ, dựa trên các yếu tố như ưu tiên, thời gian chờ đợi và các ràng buộc khác. Để tìm hiểu thêm về trình lập lịch và lập trình không đồng bộ trong Rust, bạn có thể tham khảo các nguồn tài liệu sau:
  • https://herecomesthemoon.net/2026/10/async-rust-where-does-the-scheduler-live/