2015-10-19 19 views
5

Trong Java, khi một cuộc gọi AsynchronousFileChannel.write(...) người nhận được Future, người ta có thể đợi để hoàn thành qua Future.get().Khi nào một AsynchronousFileChannel ghi "hoàn thành"?

Khi đó get() trả về cuộc gọi, có ghi được ghi vào đĩa hay chỉ là bộ đệm trang?

Nếu điều đó quan trọng, nền tảng cụ thể mà tôi tò mò là Linux & ext4.

Trả lời

1

Kiểm tra tài liệu này:

https://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousFileChannel.html#force(boolean)

Dường như ngay cả sau khi get phương pháp lợi nhuận trên Future, có một số một số lưu trữ ở cấp hệ điều hành có thể ngăn chặn các nội dung từ được ghi vào đĩa . Nếu bạn muốn thực sự chắc chắn, tôi nghĩ bạn phải làm một số force sau khi trả lại số Future.

Một trích đoạn liên quan:

Lực lượng bất kỳ bản cập nhật cho hồ sơ của kênh này để được ghi vào lưu trữ thiết bị có chứa nó. Nếu tệp của kênh này nằm trên thiết bị lưu trữ cục bộ thì khi phương thức này trả về, đảm bảo rằng tất cả các thay đổi được thực hiện cho tệp kể từ khi kênh này được tạo hoặc kể từ khi phương thức này được gọi lần cuối, sẽ được ghi vào thiết bị đó. Điều này là hữu ích để đảm bảo rằng thông tin quan trọng không bị mất trong sự kiện của sự cố hệ thống.

Nếu tệp không nằm trên thiết bị cục bộ thì không có bảo đảm như vậy được thực hiện.

Tham số metaData có thể được sử dụng để giới hạn số lượng hoạt động I/O mà phương pháp này là bắt buộc để thực hiện. Việc gửi sai cho thông số này cho biết chỉ cập nhật nội dung của tệp cần được ghi vào bộ nhớ; chuyển đúng cho biết rằng nội dung cập nhật cho cả nội dung và siêu dữ liệu của tệp phải được viết, thường yêu cầu ít nhất một hoạt động I/O khác. Cho dù thông số này thực sự có , bất kỳ hiệu ứng nào cũng phụ thuộc vào hệ điều hành cơ bản và do đó không được chỉ định là .

Gọi phương thức này có thể khiến hoạt động I/O xảy ra ngay cả khi kênh chỉ được mở để đọc. Một số hệ điều hành, ví dụ , duy trì thời gian truy cập lần cuối như một phần của siêu dữ liệu của tệp và thời gian này được cập nhật bất cứ khi nào tệp được đọc. Có hay không đây là thực sự được thực hiện là phụ thuộc vào hệ thống và do đó không được chỉ định.

Phương pháp này chỉ được đảm bảo để ép buộc các thay đổi đã được thực hiện cho tệp này của kênh thông qua các phương pháp được xác định trong lớp này.

Các vấn đề liên quan