• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

이벤트 루프와 요청핸들러 관련해서 질문있습니다.

23.12.19 23:35 작성 조회수 156

0

스크린샷_2023__12__19__오후_11_12.png

안녕하세요 이벤트 루프와 요청 핸들러 관련해서 질문이 있습니다.

  1. netty의 이벤트는 channel에서 발생한다고 들었는데 그림의 요청핸들러가 channel인가요?

    만약 channel이 맞다면 그림에선 핸들러가 한개지만 실제는 클라이언트 요청수 만큼 channel이 생성되는게 맞나요?

     

  1. 다른 질문의 답변을 보니 이벤트루프가 cpu 코어 개수만큼 생성된다고 하셨는데 여러 요청들은 이벤트루프를 무작위로 선택하나요?

  2. 만약 클라이언트의 요청이 DB io 를 사용하는데 비동기방식을 지원하지않는 jdbc라면 해당 스레드는 이벤트 루프 없이 blocking으로 DB 작업을 처리하는게 맞나요?

 

답변 1

답변을 작성해보세요.

0

질문 주셔서 감사합니다. 간단하게 답변 드려보겠습니다.

  1. netty의 이벤트는 channel에서 발생한다고 들었는데 그림의 요청핸들러가 channel인가요?

    만약 channel이 맞다면 그림에선 핸들러가 한개지만 실제는 클라이언트 요청수 만큼 channel이 생성되는게 맞나요?

     
    --> 네, 말씀하신대로 그림에서 표현하는 요청 핸들러가 channel이라고 보시면 될 것 같습니다. 그림이 좀 일반적이긴한데 요청 핸들러가 channel과 이벤트 큐의 의미를 포함한다고 생각해 주시면 될 것 같습니다.
    그리고 들어오는 요청에 channel이 하나씩 매핑된다고 보면 될 것 같습니다.


  1. 다른 질문의 답변을 보니 이벤트루프가 cpu 코어 개수만큼 생성된다고 하셨는데 여러 요청들은 이벤트루프를 무작위로 선택하나요?


    --> 채널은 특정 쓰레드에서 생성되고, 해당 쓰레드에 연결된 이벤트 루프에 매핑됩니다. 즉, 채널이 어떤 쓰레드에서 생성이 되느냐에 따라 달라지겠지만 이벤트루프를 무작위로 선택한다는 의미와는 조금 다르다고 생각합니다.

  2. 만약 클라이언트의 요청이 DB io 를 사용하는데 비동기방식을 지원하지않는 jdbc라면 해당 스레드는 이벤트 루프 없이 blocking으로 DB 작업을 처리하는게 맞나요?


    --> 이벤트 루프를 사용하지 않는 것이 아니라 DB I/O가 Blocking I/O 방식일 경우 이벤트 루프가 Blocking 되는 것을 방지하기 위해 Blocking I/O는 별도의 쓰레드 풀에서 생성한 쓰레드에서 실행될 수 있도록 Reactor나 RxJava 같은 라이브러리에서 별도의 Scheduler를 제공합니다.

    질문하신 부분에 답변이 되셨길 바랍니다. 감사합니다.