NioWorker.run() 메서드를 조사하고 어떻게 작동하는지 이해하려고합니다. 그것은 내가 몇 가지 질문이 그러나 무엇Netty 아키텍처 - NioWorker 루프에 대한 질문
for(;;) {
try {
SelectorUtil.select(selector);
if (wakenUp.get()) {
selector.wakeup();
}
cancelledKeys = 0;
processRegisterTaskQueue();
processWriteTaskQueue();
processSelectedKeys(selector.selectedKeys());
} catch (Throwable t) {
}
}
더없는 것이 분명하다 : 아래는 코드의 단순화 된 버전입니다
1. Selector.select (선택기) (500)와 선택을 수행 밀리 초 시간 초과. 차단 호출이 아닌 이유는 무엇입니까?
아래의 조각의 목적은 무엇입니까? 왜 우리는 웨이크 업을 수행해야합니까? 우리는 또한 processRegisterTaskQueue를 통해 직원에게 새로운 채널의 등록을 처리하기 때문에 사전에
if (wakenUp.get()) {
selector.wakeup();
}
덕분에
1 processRegisterTaskQueue를 호출 할 시간 기반 호출이 있어야합니다. 2. 첨부 파일의 주석은 wakenUp.get()에 대해서만 설명합니다. 선택기가 전혀 깨어나지 않아도되는 이유를 이해하고 싶습니다. 선택기와 함께 작동하는 스레드가 두 개 이상 있습니까? –
연결을 처리하기 위해 IO-Worker에서 사용하는 선택기에 별도의 선택기를 사용하여 보스 스레드에서 새 연결을 사용할 수 있습니다. 보스 셀렉터에서 IO-Worker 셀렉터로의 핸드 오버는 보스 스레드가 큐에 IO-Worker와 새로운 채널을 등록하기 위해 작업을 배치하여 처리하고 IO-Worker에 의해 처리됩니다. IO-Worker는 대기열을 처리하기 위해 깨어나야합니다. – johnstlr