sendto()를 처리하는 속도차이는...?

김영훈의 이미지

sendto함수를 이용해서 다중사용자에게 영상데이타를 보내려합니다. 이때 다중사용자에게 send하는 쓰레드를 하나만 두고 while루프문으로 전송하는 것이 나을까요?

한 프로세스에서

for (i = 0; i < USERNUM; i++)
{
     sendto(user_sock[i], 보낼데이타.....)
}

아니면 멀티쓰레드방식으로 다중스레드에서 각각 맡은 사용자에게 전송하는 것이 나을까요?

한 프로세스내의 다중쓰레드 생성후 각각의 쓰레드인덱스(index)를 이용해서
  
   sendto(user_sock(index), 보낼데이타...)

질문의 요지는 한 프로세스에서 sendto()를 while루프문으로 호출했을 때의 처리속도와 while루프문으로 돌리는 갯수만큰의 다중쓰레드에서 sendto()를 동시에 호출했을 때의 처리속도의 차이입니다. 제 생각으로는 os의 sendto()처리 속도에 따를 것 같은데요...

미리 답변에 감사드립니다.

용가리의 이미지

다중 사용자의 수에 따라 틀려질텐데요....
사용자 수가 많다면 다중 쓰레드를 쓰시는게 낫고요,
그렇지 않다면 그냥 one thread로 처리하시는게
낫습니다. 그런데 제 생각에는 다중 쓰레드로 처리
하시길 권하고 싶네요. 그것이 세션 관리도 훨씬
쉽고, 그리고 한 사용자에 의해 많은 시간이 소비될때
원 쓰레드이면 해당 사용자 때문에 다른 사용자의
서비스가 지연될 수 있기 때문에 원 쓰레드로 하시는게
낫습니다.

moonzoo의 이미지

sendto를 사용하시건 보니 udp로 보내시는것 같은데.

걍 MULTICAST로 하시면 간단하겠네요.

여러번 보낼 필요없이 한 포트로 보내면

그 포트에 대기중인 프로세스들이 전부 읽을수

있을테니까요.

김영훈의 이미지

multicast는 로컬에서만 가능한 것으로 알고 있습니다. 로컬이 아닌 경우 제가 적은 방법으로 보내야 하지 않을까요?
답변 감사드립니다.

kslee80의 이미지

IPv4 에서는 Multicast 가 LAN에서만 동작하는것이 맞습니다.
그런데, 각 클라이언트가 LAN에 연결되어 있지 않을때에는
UDP 패킷의 로스가 좀 심했던 걸로 기억합니다.

liongo의 이미지

단순히 다중 쓰레드라고 해서 sendto 를 같은 10번을 호출했을때
속도가 빨라진다면 좀 단순한 이론을 벗어나는것 같습니다..
다중쓰레드가 하나의 함수를 콜할때 더 빠른것이 아니니까요

단지 다중쓰레드 특성상 100명일경우에 race condition으로
인한 순서가 꼭 순차적으로 전송되지 않을거란 특징이 생깁니다.
for(i... 로 사용하신다면 항상 순서대로 전송될테니까요..

흠 for문과 array[i++]로 인한 속도 손실은 있겠네요..

' 형식이 내용을 규정한다. '

mach의 이미지

멀티캐스트가 IPv4에서 로컬랜에서만 되는 것이 맞다.
란 말씀은 잘못되었습니다. 멀티캐스트가 단지 필수요소가 아니기때문에 대부분의 라우터들이 멀티캐스트 패킷을 디스카드하거나 구형라우터가 멀티캐스트 패킷 포워딩을 지원하지 못해서 그렇지, 글로벌 네트워크에서도 지원될 수 있는 것입니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

datamind의 이미지

음.. -_-;;
프로세서의 부하가 문제가 되신다면,
전송은 liongo 님이 말씀하신것처럼 하고,
sendto 함수 대신에
udp connection 기법을 이용해서
write 함수를 이용해 보시는 것은 어떤지요..
이론상 sendto 의 비용을 1/3 을 줄일수 있다고 합니다.

mach의 이미지

아주 조심스런 답변입니다.
1) 만일 해당 수신자가 같은 도메인내에 있다
2) 해당 도메인내에 있는 사용자 및 관리자가 해당패킷의 유통을 허용한다
3) 이로 (패킷유통으로) 불만을 제기하는 자가 없다.

1,2,3을 만족한다면 해당 도메인에 멀티캐스트가 아닌 브로드캐스트 패킷을 방송하는 방법도 있습니다. 그러나, 아주 아주 조심스럽게 사용하셔야 합니다.
이 방법은 때로 심각한 상황(법적 대응등)을 연출할 수도 있습니다요.
그러나, 사내방송등이라면 문제가 없겠지요?

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

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