데이터 통신 프로그램에서...

standalon의 이미지

두개의 노드가 서로 데이터를 송수신하면서 연산을 수행하는 소켓통신 프로그램입니다.
즉, 한 노드에서 연산을 수행한 후에 데이터를 송신하고, 수신자는 데이터를 수신한 후에 연산을 수행하고 다시 전송,,, (반복)
전체 실행 속도가 중요하기 때문에 가능한 많은 쓰레드로 실행되어서 부하가 높은 편입니다.

문제는 데이터 수신 노드가 연산하느라 데이터 수신을 못하는 상태에서, 송신 노드가 계속 데이터를 송신하면,
연결이 끊어지면서 에러가 발생하고 종료가 됩니다. (errno=104 : connection reset by peer)
통신이 느려져서 전체 실행 속도가 느려지더라도 종료되지 않게 하고 싶거든요. (예를 들면, 데이터를 덜 받는다던지, 등등)
실행 중간에 종료되면, 전체 실행 속도를 측정할 수 없기 때문에 의미가 없어집니다.

이렇게 프로그램이 중간에 종료되지 않게 하는 것이 가능한가요??
(flow control을 한다면 가능할 것 같기는 한데, 구현하기가 매우 어려울 것 같네요.)
아니면 불가능하기 때문에 또는 구현하기가 너무 어렵기 때문에 수신을 못하는 상황을 막기 위해서,
양쪽 노드에서 데이터를 처리하기 위한 부하를 적절하게 맞춰줘야 하는건가요??

고수님들의 답변 부탁드립니다.
감사합니다.

jick의 이미지

TCP 통신인가요? TCP로 데이터를 주고받는다면 수신 노드가 데이터를 안 받고 있으면 결국 버퍼가 다 차서 송신하는 쪽이 더 데이터를 보내지 못하고 기다리는 상황이 될 텐데요. TCP는 원래 기본적으로 flow control 기능이 내장되어 있습니다.

데이터를 주고받는 함수들을 사용하면서 에러 체크를 정확히 안 했거나, 중간에 firewall이 이상하게 들어가 있거나 한 게 아닐까 하는 생각이 듭니다만...

에효의 이미지

에효의 이미지

chrak의 이미지

쓰레드를 어떻게 쓰셔서 작업을 할당하셨는지 모르겠지만
패킷을 복호화 한 후 테스크로 만들어 큐잉한 후
별도의 쓰레드에서 해당 테스크를 처리하면 수신 버퍼가 가득 찰 정도로 데이터가 쌓이지는 않을 것 같습니다.
즉, 빨리 처리될 수 있는 쓰레드 따로, 느리게 처리되는 쓰레드 따로 구분해서 빨리 처리되는 부분(복호화 부분)에 막힘이 없도록 하는 것이지요...
단, 이렇게 되면 작업량이 많아지면 큐에 데이터가 많이 쌓여 메모리 초과로 서버가 뻗을 수도 있습니다. 이정도로 쌓일 일도 흔치 않겠지만 말이죠.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.