[Rust] Tăng tốc download sử dụng nhiều threads trong Rust

Bài toán download một file từ mạng cũng là bài toán quen thuộc. Trong bài này chúng ta sẽ tìm hiểu cách để download một files lớn bằng cách sử dụng nhiều threads để download từng phần và ghép lại. Điều này sẽ giúp giảm thời gian download.

Bài này phân tích từ https://github.com/aochagavia/toy-download-accelerator. Các kỹ năng có thể học được trong bài download này là:

  • Chia một buffer thành các buffer nhỏ
  • Sử dụng semaphore để giới hạn số threads thực hiện đồng thời
  • Cách gửi một http request để download một phần nhỏ của một files
Read more  ↩︎

[Rust] Macro 1: Tạo một derive macro đơn giản nhất

Trong bài học này chúng ta sẽ học cách để tạo ra một Dervice macro đơn giản nhất. Chúng ta sẽ hiểu rõ các bước để tạo ra một macro derive và có cái hình dung ban đầu về cách một dervie macro hoạt động. Chúng ta sẽ không đề cập cách để debug sủ dụng cargo expand cũng như học hết tất cả các cú pháp có thể có macro dạng này. Chúng ta cũng sẽ không bàn để attribute derive macro cũng như các khái niệm nâng cao về hygiene. Nó là sẽ thuộc về một bài tìm hiểu khác. Các bạn có thể tìm hiểu cuốn sách John Geet

Read more  ↩︎

[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  ↩︎