Theo this tutorial tệp đĩa không đồng bộ io có thể dễ dàng đạt được bằng cách sử dụng AIO trên Linux, ít nhất là từ điểm lập trình/api. Nhưng trước và sau hướng dẫn này, tôi đã đọc rất nhiều bài viết và bài viết rằng điều này hoặc là không thể được thực hiện hoặc bạn nên sử dụng libevent với một bản vá và nhiều vấn đề khác. Một điều nữa là vòng lặp mà tôi đã chờ đợi một tín hiệu, nhưng dựa trên hướng dẫn này tôi có thể sử dụng một cơ chế gọi lại, điều này rõ ràng làm cho AIO dễ sử dụng hơn nhiều.Tệp đĩa Linux AIO
Bây giờ, tôi không phải là lập trình viên Linux ngay cả khi quay lâu Tôi chỉ muốn tìm một cách đơn giản để hỗ trợ tập tin đĩa không đồng bộ trên Linux, tìm hiểu và thêm nó vào thư viện io đĩa async mà tôi cần cho dự án cá nhân. Hiện tại tôi đang sử dụng io chồng lên nhau trên cửa sổ và chuỗi công việc io trên nền tảng không phải cửa sổ. Kể từ khi giải pháp mutithreaded có thể được khôn lanh, tôi muốn thay thế nó trên Linux với AIO.
SO, điều gì xảy ra với AIO như được mô tả trong hướng dẫn này? Có hiệu suất không? Có hạn chế về hoạt động có thể được thực hiện bằng AIO không?
p.s. Tôi không quan tâm nếu mã sẽ không được di động đến các nền tảng tuân thủ POSIX khác, miễn là nó hoạt động trên các bản phân phối Linux chính. Và tất cả những gì tôi quan tâm là io đĩa thường xuyên.
Cảm ơn.
Hỗ trợ AIO trên Linux là xấu. Hiện tại, AIO sẽ bỏ qua bộ đệm đệm và thực hiện trực tiếp đĩa IO, những gì có thể làm tổn thương hiệu năng một cách tồi tệ. – lvella
nó có thể tồi tệ hơn giải pháp chủ đề công nhân không? – p00ya00
Nó phụ thuộc vào bạn sử dụng. Nếu tất cả những gì bạn làm là để đọc hoặc viết một tập tin lớn tuần tự, nó sẽ hoạt động tốt, nhưng nếu bạn truy cập vào các khối nhỏ ngẫu nhiên, nó chắc chắn sẽ tồi tệ hơn. Nhân tiện, giải pháp thread-worker này là những gì bạn nhận được nếu bạn sử dụng giao diện POSIX 'aio_read() 'vv Nó được thực hiện với các luồng chặn trên không gian người dùng bởi glibc. – lvella