2013-02-09 2 views
0

UDP를 통해 상태 스위치를 기록하는 프로그램이 있습니다. 로깅 기능이 가능한 한 빨리 필요하지만 네트워킹은 느린 것으로 알고 있습니다. 별도의 스레드에서 UDP 데이터를 전송할 때 어떤 이점이 있습니까? 아니면 UDP를 빠른 호출로 보내고 있습니다. 아무 것도 설정하거나 대기 할 필요가 없기 때문에 (소켓을 미리 열었다 고 가정)?
즉시 반환하는 것이 좋지만 내부적으로 일부 I/O 리소스를 기다리는 경우 문제가 될 수 있습니다. 그거야?별도의 스레드에서 UDP를 전송하십시오.

+1

플랫폼? Linux 또는 Windows 또는 기타? – Eric

+0

@ 에릭 둘 다 있지만 주된 것은 윈도우입니다. 그것은 중요합니까 아니면이 일반 "당신은 항상 플랫폼을 언급해야합니까?" – baruch

+0

@baruch : 소켓은 Windows와 POSIX에 따라 다릅니다. "차단합니까?"에 대한 일반적인 대답은 무엇입니까? 두 플랫폼 모두에서 동일 할 수 있지만 그렇게하지 못하게하는 코드는 다를 수 있습니다. – icktoofay

답변

1

데이터의 [내가 메가 바이트 분마다 의미] [또는 매우 자주, 내가 기대 (패킷 분마다 수백)는 send (또는 write)은 매우 빨리합니다.

시간이 오래 걸리는 유일한 이유는 네트워크가 가져올 수있는 것보다 많은 데이터를 제공하는 경우입니다. 따라서 커널은 사용 가능한 버퍼 슬롯이 사용 가능할 때까지 기다려야합니다.

퍼포먼스와 관련된 모든 것들과 마찬가지로 인터넷에서 물어 보는 것보다 항상 측정하는 것이 더 좋습니다 ... 저는 현대의 PC에서 sendmsg 콜이 작은 패킷, 그리고 패킷이 수십 바이트 이상인 경우 8 바이트 당 약 1 여분의 나노초 (수십 킬로바이트 크기까지)가 필요합니다. 수백 킬로바이트가되면 타이밍은 3-10 배 증가합니다.

0

수 있습니다. 대기를 방지하려면 소켓을 비 차단으로 설정하십시오.
how Python sets the appropriate flag을 (를) 보시려면 여기를 클릭하십시오. 당신이 엄청난 양을 전송하지 않는 경우

관련 문제