작업별 타임아웃 관리
글쓴이: bigbaby / 작성시간: 월, 2010/07/05 - 5:38오후
클라이언트의 한쓰레드가 서버로 어떤 작업(A)을 요청하는데,
서버로부터 응답이 일정시간 동안 오지 않은 경우, 타임아웃 처리를 해야합니다.
쓰레드가 서버로 메시지를 전송하고 블록킹 되어 응답이 올때까지 기다리면 되긴 하지만,
쓰레드가 타임아웃 될때까지 블록킹되므로, 비효율적일 것 같습니다.
큐에 정보(요청시간 등)를 넣어두고 유지한다고 해도, 타임아웃을 체크하는 방법이 잘 모르겠습니다.
이런 경우에 어떤 식으로 처리를 해야하는지 답변 부탁드립니다. ㅠㅠ
Forums:
인용: 쓰레드가
이건 상황에 따라 다를 수 있습니다.
스레드가 서버와 통신하는 것 외에 하는게 없다면 그냥 블럭되어 있는게 더 낫겠죠.
스레드가 서버에서 응답 기다리는 것 외에 다른 처리를 해야 한다면 몇가지 방법이 있는데,
select 혹은 recv 타임아웃 인터벌을 짧게 주고 타임아웃되면
계산해서 전부 다 쓰면 timeout 처리.
아예 Non-block으로 처리 하는 방법. 기본은 위와 동일.
libevent 따위의 event-driven framework을 사용해서 이벤트 등록해두고 타이머로 처리 하는방법.
등이 있겠습니다. UNP에 이에 관련된 내용이 있을겁니다. 아마도.
한번 찾아보세요.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
답변 감사합니다.
네. 부하가 적으면 상관없지만..
클라이언트쪽에서의 요청을 서버로 빠르게 보내야되서
응답시간이 좀 중요해서요 ^^
윗분이 말씀하신것
윗분이 말씀하신것 처럼 제 생각에도 그냥 select 쓰면 해결될것 같습니다.
select 쓰시면서 적당하게 타임아웃 주신후, main 쓰레드와 worker 쓰레드간에 통신을 pipe 같은것으로 유지 하시면서 worker 쓰레드가 main 쓰레드에서 보내는 명령을 select에서 모니터링 하시면 됩니다.
이렇게 하시면 타임아웃 전에도 worker 쓰레드를 관리할수 있으니 아마도 원하시는대로 컨트롤 될것 같습니다.
다만, 제가 문제를 제대로 이해하고 있는지 모르겠습니다.
Linux rules!!!
Linux rules!!!
댓글 달기