네트워킹 코드의 성능을 측정하려고하는데 매우 다양한 결과가 나타납니다. 지금까지 나는 그것을 설명 할 수 없었고, 다른 사람들은 올바른 방향으로 도울 수 있거나 지적 할 수있을 것입니다.C++에서 비 차단 소켓 쓰기 성능
socket(AF_INET, SOCK_STREAM, 0);
int one = 1;
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one)));
current = fcntl(socket, F_GETFL);
fcntl(socket, F_SETFL, O_NONBLOCK | current);
내 메시지가 항상 200 바이트 :
그래서 나는 소켓을 만들 수 있습니다. 메시지를 보냅니다 코드는 다음과 같습니다uint64_t start (nanotimestamp());
unsigned char * buf;
...
//build a message
//few calls to snprintf
//buffer is preallocated
...
write(socket, buf, size);
uint64_t end (nanotimestamp());
performance = end - start;
uint64_t nanotimestamp()
{
struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);
return now.tv_sec * 1e9 + now.tv_nsec;
}
코드는 드문 경우> (100) 우리를 4.4 타이밍은 20에서 80 마이크로 초에 많은 변화 GCC로 컴파일 된 64 비트 레드햇 (6)에서 실행되고있다.
그래서 write에 대한 호출이 블로킹 (blocking)이 아닌 경우 왜 그런 차이가 나는가?
네트워크 성능은 항상 네트워크 트래픽 조건의 영향을받습니다. 그것은 또한 그가 동일한 서브넷에 있거나 다른 – Swapnil
인지 여부에 관계없이 다른 서버/클라이언트의 위치에 따라 달라집니다. 그러나 여기서는 네트워크 성능을 측정하지 않고 비 블로킹 소켓을 사용하고 있습니다. 아무것도 보내지 않으므로 성능은 전적으로 컴퓨터에서 실행해야합니다. – Tadzys