[Rust] Bài tóm Producer/Consumer và cách tạo một queue an toàn (không phải not async)

Bài toán producerconsumer là một bài toán quen thuộc và thường được sử dụng trong nhiều chương trình. Trong Rust khi nghĩ đến điều này khái niệm channel trong thư viện tokio và sử dụng tokio::mspc để thực hiện như một channel queue. Producer sử dụng hàm send để gửi một giá trị vào channel này và consumer dùng hàm recv để lấy ra.

Nhưng bây giờ, giả sử vì lý do gì đó chúng ta không thể sử dụng mspc này và phải tự viết một đoạn mã với cơ chế giống như thế. Nghĩa là chúng ta sẽ phải đẩy dữ liệu vào queue từ producer và lấy ra bởi consumer. Liệu cách làm nên là như nào ?

Bạn sẽ nghĩ rằng việc này có gì đâu ? Cứ đẩy vào rồi lấy rồi check choắc kích thước queue thôi mà ? Chúng ta sẽ cùng phân tích

Đây là một trong năm bài bài toán mình làm khi đầu vào Elcom ngày xưa nhưng viết trên C++.Khi học sang Rust, mình đoán nó sẽ cơ chế tương tự.

Read more  ↩︎

[Rust] &Option<T> hay Option<&T> ?

Bài này chúng ta sẽ tìm hiểu về &Option<T>Option<&T>.Như các bạn đã biết thì trong Rust chúng ta có best practice là hay trả về Option hoặc Result enum. Việc hiểu rõ cũng như thao tác biến đổi qua lại giữa các kiểu này dường như là kỹ năng bắt buộc. Bài hôm này chúng ta sẽ tìm hiểu về &Option<T>Option<&T> ? Trong thực tế chúng ta nên sử dụng cài nào. Chủ đề này chỉ là một vấn đề nhỏ, nó hơi tiểu tiết nhưng thực sự hấp dẫn. Nó cũng là chủ đề thực sự xoắn não rất khó diễn đạt tường minh. Mình đã phải tham khảo từ rất nhiều nguồn để với hi vọng giải thích bằng ngôn ngữ nông dân dễ hiểu nhất.

Read more  ↩︎

[Rust] Concurrency trong Tokio?

Bài này chúng ta sẽ tìm hiểu về các hàm như join, stream race, spawn

Read more  ↩︎