관리자 글쓰기
[NIO]TCP 넌블로킹 채널 - 선택된 키셋
2017. 1. 5. 13:51 - 개발 새발

- select() 메소드

int keyCount = selector.select();

int keyCount = selector.select(long timeout);

int keyCount = selector.selectNow();


select()는 관심키셋에 저장된 SelectionKey로부터 작업 처리 준비가 되었다는 통보가 올 때까지 대기(블로킹)한다. 최소한 하나의 SelectionKey로부터 작업 처리 준비가 되었다는 통보가 오면 리턴한다. 리턴값은 통보 해온 SelectionKey의 수

이 메소드는 블로킹되므로 UI 및 이벤트를 처리하는 스레드에서 호출하면 안되고, 별도의 작업 스레드를 생성해서 실행해야 한다. select()가 리턴 하는 경우

 - 채널이 작업 처리 준비가 되었다는 통보를 할 때

 - Selector의 wakeup() 메소드를 호출할 때

 - select()를 호출한 스레드가 인터럽트될 때


- 작업 유형 바꾸기

selectionKey.interestOps(SelectionKey.OP_WRITE);

selector.wakeup();


wakeup() 메소드는 변경된 작업 유형을 감지하도록 하기 위해 Selector의 select() 브로킹을 해제하고 다시 실행하도록 한다.



2017/01/05 - [코딩/Java] - [NIO]TCP 넌블로킹 채널 - 셀렉터 생성과 등록