sendto()를 처리하는 속도차이는...?
글쓴이: 김영훈 / 작성시간: 목, 2003/05/15 - 12:02오후
sendto함수를 이용해서 다중사용자에게 영상데이타를 보내려합니다. 이때 다중사용자에게 send하는 쓰레드를 하나만 두고 while루프문으로 전송하는 것이 나을까요?
한 프로세스에서 for (i = 0; i < USERNUM; i++) { sendto(user_sock[i], 보낼데이타.....) }
아니면 멀티쓰레드방식으로 다중스레드에서 각각 맡은 사용자에게 전송하는 것이 나을까요?
한 프로세스내의 다중쓰레드 생성후 각각의 쓰레드인덱스(index)를 이용해서 sendto(user_sock(index), 보낼데이타...)
질문의 요지는 한 프로세스에서 sendto()를 while루프문으로 호출했을 때의 처리속도와 while루프문으로 돌리는 갯수만큰의 다중쓰레드에서 sendto()를 동시에 호출했을 때의 처리속도의 차이입니다. 제 생각으로는 os의 sendto()처리 속도에 따를 것 같은데요...
미리 답변에 감사드립니다.
Forums:
다중 사용자의 수에 따라 틀려질텐데요....사용자 수가 많다면 다중
다중 사용자의 수에 따라 틀려질텐데요....
사용자 수가 많다면 다중 쓰레드를 쓰시는게 낫고요,
그렇지 않다면 그냥 one thread로 처리하시는게
낫습니다. 그런데 제 생각에는 다중 쓰레드로 처리
하시길 권하고 싶네요. 그것이 세션 관리도 훨씬
쉽고, 그리고 한 사용자에 의해 많은 시간이 소비될때
원 쓰레드이면 해당 사용자 때문에 다른 사용자의
서비스가 지연될 수 있기 때문에 원 쓰레드로 하시는게
낫습니다.
MULTICAST 로 하세요.
sendto를 사용하시건 보니 udp로 보내시는것 같은데.
걍 MULTICAST로 하시면 간단하겠네요.
여러번 보낼 필요없이 한 포트로 보내면
그 포트에 대기중인 프로세스들이 전부 읽을수
있을테니까요.
multicast는 로컬에서만 가능한 것으로 알고 있습니다.
multicast는 로컬에서만 가능한 것으로 알고 있습니다. 로컬이 아닌 경우 제가 적은 방법으로 보내야 하지 않을까요?
답변 감사드립니다.
UDP, Multicast
IPv4 에서는 Multicast 가 LAN에서만 동작하는것이 맞습니다.
그런데, 각 클라이언트가 LAN에 연결되어 있지 않을때에는
UDP 패킷의 로스가 좀 심했던 걸로 기억합니다.
단순히 다중 쓰레드라고 해서 sendto 를 같은 10번을 호출했을때
단순히 다중 쓰레드라고 해서 sendto 를 같은 10번을 호출했을때
속도가 빨라진다면 좀 단순한 이론을 벗어나는것 같습니다..
다중쓰레드가 하나의 함수를 콜할때 더 빠른것이 아니니까요
단지 다중쓰레드 특성상 100명일경우에 race condition으로
인한 순서가 꼭 순차적으로 전송되지 않을거란 특징이 생깁니다.
for(i... 로 사용하신다면 항상 순서대로 전송될테니까요..
흠 for문과 array[i++]로 인한 속도 손실은 있겠네요..
' 형식이 내용을 규정한다. '
멀티캐스트
멀티캐스트가 IPv4에서 로컬랜에서만 되는 것이 맞다.
란 말씀은 잘못되었습니다. 멀티캐스트가 단지 필수요소가 아니기때문에 대부분의 라우터들이 멀티캐스트 패킷을 디스카드하거나 구형라우터가 멀티캐스트 패킷 포워딩을 지원하지 못해서 그렇지, 글로벌 네트워크에서도 지원될 수 있는 것입니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
음.. -_-;;프로세서의 부하가 문제가 되신다면, 전송은 l
음.. -_-;;
프로세서의 부하가 문제가 되신다면,
전송은 liongo 님이 말씀하신것처럼 하고,
sendto 함수 대신에
udp connection 기법을 이용해서
write 함수를 이용해 보시는 것은 어떤지요..
이론상 sendto 의 비용을 1/3 을 줄일수 있다고 합니다.
조심스런 답변
아주 조심스런 답변입니다.
1) 만일 해당 수신자가 같은 도메인내에 있다
2) 해당 도메인내에 있는 사용자 및 관리자가 해당패킷의 유통을 허용한다
3) 이로 (패킷유통으로) 불만을 제기하는 자가 없다.
1,2,3을 만족한다면 해당 도메인에 멀티캐스트가 아닌 브로드캐스트 패킷을 방송하는 방법도 있습니다. 그러나, 아주 아주 조심스럽게 사용하셔야 합니다.
이 방법은 때로 심각한 상황(법적 대응등)을 연출할 수도 있습니다요.
그러나, 사내방송등이라면 문제가 없겠지요?
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기