Wednesday, June 19, 2013

NIO - SelecableChannel

Một channel có thể ghép kênh thông qua một Selector

Trong trình tự để được sử dụng với một selector, một thể hiện của class này trước tiên phải được đăng kí thông qua register method. Method này trả về một đối tương SelectionKey mới đại diện cho sự đăng kí với selector.

Khi đã đăng kí với selector, một channel được duy trì tới khi nó bị hủy bỏ. Điều này liên quan tới deallocating  bất cứ tài nguyên nào được cấp phát cho channel bởi selector.

Một channel không thể bị deregister trực tiếp. thay vào đó key đại diện cho sự đăng kí của nó phải bị hủy bỏ. Hủy bỏ một key tức là channel bị deregister trong suốt hoạt động lựa chọn tiếp theo của selector. Key có thể bị hủy bỏ bằng cách gọi phương thức cancel của nó. Tất cả key của channel sẽ bị hủy bỏ ngầm nếu channel bị đóng.

Nếu selector bị đóng thì channel sẽ bị deregister, và key đại diện cho sự đăng kí sẽ không hợp lệ.

Một channel có thể được đăng kí nhiều selector riêng biệt

Kiểm tra channel được đăng kí hay chưa ta sử dụng phương thức isRegistered

Các Selectable channel an toàn khí sử dụng nhiều thread cùng lúc.

Blocking mode
Một selectable channel có 2 chế độ: blocking hoặc non-blocking. Trong chế độ blocking mọi hoạt động I/O được gọi trên channel sẽ bị block tới khi nó hoàn thành. Trong chế độ non-blocking một hoạt động I/O sẽ không bị block và có thể truyền số byte ít hơn số byte được yêu cầu hoặc có thể không truyền byte nào. Chế độ blocking của selectable channel có thể xác định bởi phương thức isBlocking.

Khi mới khởi tạo selectable channel trong chế độ blocking. Non-blocking rất hữu dụng trong việc kết hợp với selector-based multiplexing. Một channel phải được đặt trong chế độ non-blocking mode trước khi đăng kí với một selector, mà có thể không trở về được chế độ blocking cho tới khi no bị deregister.

No comments:

Post a Comment