- Bài viết này thảo luận về tranh cãi trong cộng đồng Rust xoay quanh việc sử dụng bộ thực thi đa luồng, tức các runtime async thực hiện work-stealing để phân phối công việc một cách cân bằng.
- Một số người dùng Rust ủng hộ một kiến trúc thay thế gọi là "thread-per-core", hứa hẹn hiệu năng tốt hơn và dễ triển khai hơn.
- Thuật ngữ "thread-per-core" dễ gây hiểu nhầm. Mọi bộ thực thi đa luồng đều là thread-per-core, tạo một OS thread cho mỗi lõi và lập lịch công việc trên các luồng đó.
- Thread-per-core kết hợp ba ý tưởng: xử lý đồng thời trong không gian người dùng, biến I/O thành bất đồng bộ để tránh chặn luồng, và phân vùng dữ liệu giữa các lõi CPU để loại bỏ chi phí đồng bộ hóa cũng như việc di chuyển dữ liệu giữa các bộ nhớ đệm CPU.
- Tranh cãi này chủ yếu xoay quanh điểm thứ ba, còn async Rust có thể đáp ứng hai yêu cầu đầu tiên.
- Trong kiến trúc thread-per-core, có thể thực hiện hai tối ưu hóa: đánh cắp công việc giữa các luồng và chia sẻ ít trạng thái nhất có thể.
- Work-stealing cải thiện tail latency bằng cách giúp mọi luồng luôn có việc để làm, nhưng khó triển khai và có thể gây ra chi phí đồng bộ hóa cùng cache miss.
- Share-nothing cải thiện tail latency bằng cách giữ dữ liệu trong bộ nhớ đệm nhanh hơn gắn với một lõi CPU duy nhất, nhưng có thể khó triển khai với các ứng dụng phức tạp cần thay đổi trạng thái trên nhiều phân vùng.
- Bài viết cho rằng trong các hệ thống dùng trạng thái chia sẻ, work-stealing có thể cải thiện mức sử dụng CPU khi chịu tải.
1 bình luận
Ý kiến trên Hacker News
Send + Sync + 'static, và một số người cảm thấy điều này khá nặng nề.Sendlà yêu cầu cho phép di chuyển tác vụ giữa các luồng của executor, và đây có vẻ là một khuyết điểm của hệ thống async trong Rust.asyncbị xem là tối ưu hóa quá sớm đối với nhiều chương trình Rust.Send,Syncvà'static.