안녕하세요 네티 책을 보다 궁금하여 질문을 남기게 되었습니다.
책을 보다보니 네티는 주어진 자원으로 최적의 효과를 내게 고성능 서버 프레임 워크라는걸 봤습니다.
책을 보다 궁금한것이 생겨 글을 남깁니다.
네티는 멀티 쓰레드 방식이 아니라 ContextSwtich적다는 이야기를 들은거 같은데..
왜 적은지에 대해 제가 이해한게 맞는 부분인지 체크를 부탁 드리겠습니다.
전제는
1. BossEventGroup(1) WorkerEventGroup(1) 가정 한다.
2. 데이터 베이스 작업은 3초 정도 걸린다.
3. 요청은 두개의 채널만 있고 각 채널이름은 ChannelOne ChannelTwo만 있다는 가정
4. 두채널 모두 같은 서비스 로직을 작업한다
쓰레드는 bossGroup,WorkerEventGroup 2개만 사용한다 했을때입니다.
아래는 시나리오 입니다.
1. Channel(Socket)들은 클라이언트들의 개별 요청이 들어온다.
ChannelOne ChannelTwo 두개 요청이 온다.
2.첫번째 ChannelOne은 WorkerEventGroup에서 받은 WorkerEventLoop에서 비지니스 로직을 작업 한다.
3. ChannelOne은 WorkerEventLoop에서 작업을 하다가 데이터 베이스 요청 관련 작업을 하게 되면 데이터 베이스요청을 보낸다.
4. ChannelOne 작업은 데이이터 베이스 데이터 요청을 보내고 그 작업은 IO 작업이기 때문에 CPU를 사용하지 않기 때문에 CPU를 사용 하지 않는다.
5. 사용하지 않는 CPU는 다른 Channel(ChannelTwo)에서 들어온 이벤트 곧 이벤트 큐에 적재 되어 있는 이벤트를 처리한다.
6. ChannelTwo는 데이터 베이스 요청 작업을 보내고 그리고 ChannelOne 데이터베이스 작업이 완료되어
데이터를 받는다.
7. WorkerEventLoop는 ChannelTwo 데이터를 받는동안 ChannelOne에 들어온 나머지 작업후 응답을 보내고 나머지 ChannelTwo에도 나머지 작업후 응답을 보낸다.
끝
위와 같은 시나리오 때문에 네티가 ContextSwitching 비용이 적은게 맞을까요??
부탁드리겠습니다. 감사합니다..