ChannelFuture 의 await 과 sync 의 정확한 차이점이 궁금합니다.

1,163 views
Skip to first unread message

삼다수

unread,
Jan 24, 2019, 12:14:34 AM1/24/19
to Netty Korean User Group
정확히는 아래 네 메서드의 차이를 알고 싶습니다. 
API 문서를 읽어봐도 정확히 이해하기 어렵네요.

sync : 완료 될 때까지이 미래를 기다리고,이 미래가 실패하면 실패의 원인을 다시 던집니다.
syncUninterruptibly : 완료 될 때까지이 미래를 기다리고,이 미래가 실패하면 실패의 원인을 다시 던집니다.

await : 이 미래가 끝나기를 기다립니다.
awaitUninterruptibly : 이 미래가 중단없이 완료 될 때까지 기다립니다. 이 메소드는 InterruptedException을 캐치 해, 자동적으로 파기합니다.

text 만으로 보면 sync 와 await 의 차이는 실패의 원인을 다시 던지느냐 아니냐의 차이로 보이고 
Uninterruptibly 는 InterruptedException 을 캐치 해, 자동적으로 파기하는 정도로 이해됩니다. 

실패 원인을 다시 throw 하는 것이 어떤 의미를 가질까요 ? 
Uninterruptibly 는 Exception 을 처리하지 않고 무시한다는 의미로 이해하면 맞을까요 ? 


이규남

unread,
Jan 24, 2019, 1:18:43 AM1/24/19
to Netty Korean User Group
삼다수님의 질문 덕분에 다시 한 번 생각해본 함수들이네요..
(저도 책이나 문서에서처럼 sync를 사용하고 있습니다)

그래서 생각해보니 아시다시피 소켓통신의 실패 원인은 다양합니다.
이런 원인들에 대비하여 다른 동작을 하기 위함이 아닐까 합니다.

예전에 제가 C로 네트워크 서버를 만들 때에 에러 상황에 따른 케이스를 나눴습니다.
if (ETIMEDOUT==error) // 재접속
else if (EIO == error) //다른거..
등등?

아마도 실패의 활용성에 중점을 둔 것이라 생각하는데
더 자세히 아시는 분이 알려주시면 더욱 좋겠네요!
Message has been deleted

삼다수

unread,
Jan 24, 2019, 2:48:52 AM1/24/19
to Netty Korean User Group
규남님 답변 감사합니다.
우선은 API 에서 권고하는대로 sync 대신 listner 를 통해 callback 으로 처리하고 있습니다만 
해당 API 들에 대해 근본적으로 궁금하긴 해서요. netty 코드를 좀 상세히 살펴봐야겠네요. 

2019년 1월 24일 목요일 오후 3시 18분 43초 UTC+9, 이규남 님의 말:
Reply all
Reply to author
Forward
0 new messages