Sự đăng kí của một selectable channel với một selector được đại diện bởi một đối tượng SelectionKey. Một selector duy trì 3 set của selection key:
- Key set bao gồm các key đại diện các registration channel hiện tại của selector. Set này được trả về bởi phương thưc keys
- Selected-key set là một tập hợp của các key mà mỗi channel của key được phát hiện là đã sẵn sàng cho it nhất một trong các hoạt động được định nghĩa trong tập hợp interest của key trong suốt một hoạt động lựa chọn trước đó. Set này được trả về bởi phương thức selectedKeys. selected-key set là subset của key set.
- The cancelled-key set là một tập các key mà đã bị hủy bỏ nhưng các channel vẫn chưa hoàn toàn deregister. Không thể truy xuất trực tiếp set này. Là subset của key set.
Cả 3 set đều rỗng khi mới được khởi tạo.
Một key được thêm vào key set của selector như một tác dụng phụ của việc đăng kí channel thông qua phương thức register của channel. Các key bị hủy bỏ được xóa khỏi keyset strong suốt các hoặt động lựa chọn. Key set không có khả năng sử đổi trực tiếp.
Một key được thêm vào cancelled-key set khi nó bị hủy bỏ bằng cách đóng channel của nó hoặc gọi phương thức cancel. Việc hủy bỏ một key sẽ khiên channel bị deregister trong suốt hoạt động lựa chọn tiếp theo, tại thời điểm đó key sẽ bị xóa khỏi key set của selector.
Các key được thêm vào selected-key set bởi các hoạt động lựa chọn. Một key có thể bị xóa trực tiếp từ selected-key set bằng cách gọi phương thức remove của set hoặc phương thức remove của một interator thu được từ set
Selection
Trong môi selection operation các key có thể được thêm vào và xóa bỏ từ một selected-key set của selector và có thể bị xóa khỏi key set và cancelled-key set của nó. Selection được thực thi bỏi select(), select(long) và selectNow() method. Liên quan tới 3 bước:
- Mỗi key trong cancelled-key set bị xóa bỏ khỏi từng key set của cái mà nó là thành viên và channel của nó bị deregister. Bước này cancelled-key set rỗng.
- underlying operating system được truy vấn cho một update về sự sẵn sàng của mỗi channel còn lại để thực thi bất kỳ các hoạt động được định nghĩa bởi key's interest set của nó như tại thời điểm mà selection operation bắt đầu.Cho một channel mà sẵn sàng cho ít nhất một hoạt động, một trong 2 action sau sẽ được thực thi:
- Nếu key của channel không có sẵn trong selected-key set thì nó được thêm vào, và ready-operation set của nó được chỉnh sửa để xác định chính xác những hoạt động cho cái mà channel báo cáo để sẵng sàng ngay bây giờ. Bất kì thông tin sẵng sàng ghi lại trước đó trong ready set bị hủy bỏ.
- Mặt khác key của channel đã có sẵn trong selected-key set, vì vậy ready-operation set của nó được sửa đổi để xác định bất kì hoạt động mới cho cái mà channel được báo cáo để sẵn sàng. bất kỳ thông tin sẵn sàng được ghi lại trước đó trong ready set được duy trì
- Nếu tất cả key được thêm vào cancelled-key set trong khi bước 2 đang trong quá trình thì chúng được xử lý như trong bước 1.
No comments:
Post a Comment