작업별 타임아웃 관리

bigbaby의 이미지

클라이언트의 한쓰레드가 서버로 어떤 작업(A)을 요청하는데,

서버로부터 응답이 일정시간 동안 오지 않은 경우, 타임아웃 처리를 해야합니다.

쓰레드가 서버로 메시지를 전송하고 블록킹 되어 응답이 올때까지 기다리면 되긴 하지만,

쓰레드가 타임아웃 될때까지 블록킹되므로, 비효율적일 것 같습니다.

큐에 정보(요청시간 등)를 넣어두고 유지한다고 해도, 타임아웃을 체크하는 방법이 잘 모르겠습니다.

이런 경우에 어떤 식으로 처리를 해야하는지 답변 부탁드립니다. ㅠㅠ

mithrandir의 이미지

Quote:

쓰레드가 타임아웃 될때까지 블록킹되므로, 비효율적일 것 같습니다.

이건 상황에 따라 다를 수 있습니다.
스레드가 서버와 통신하는 것 외에 하는게 없다면 그냥 블럭되어 있는게 더 낫겠죠.

스레드가 서버에서 응답 기다리는 것 외에 다른 처리를 해야 한다면 몇가지 방법이 있는데,
select 혹은 recv 타임아웃 인터벌을 짧게 주고 타임아웃되면

timeout -= sliced_timeout

계산해서 전부 다 쓰면 timeout 처리.

아예 Non-block으로 처리 하는 방법. 기본은 위와 동일.
libevent 따위의 event-driven framework을 사용해서 이벤트 등록해두고 타이머로 처리 하는방법.

등이 있겠습니다. UNP에 이에 관련된 내용이 있을겁니다. 아마도.
한번 찾아보세요.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

bigbaby의 이미지

네. 부하가 적으면 상관없지만..

클라이언트쪽에서의 요청을 서버로 빠르게 보내야되서

응답시간이 좀 중요해서요 ^^

yeilho의 이미지

윗분이 말씀하신것 처럼 제 생각에도 그냥 select 쓰면 해결될것 같습니다.

select 쓰시면서 적당하게 타임아웃 주신후, main 쓰레드와 worker 쓰레드간에 통신을 pipe 같은것으로 유지 하시면서 worker 쓰레드가 main 쓰레드에서 보내는 명령을 select에서 모니터링 하시면 됩니다.

이렇게 하시면 타임아웃 전에도 worker 쓰레드를 관리할수 있으니 아마도 원하시는대로 컨트롤 될것 같습니다.

다만, 제가 문제를 제대로 이해하고 있는지 모르겠습니다.

Linux rules!!!

Linux rules!!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.