C++ 从单独的线程发送UDP

C++ 从单独的线程发送UDP,c++,c,sockets,udp,C++,C,Sockets,Udp,我有一个通过UDP记录状态切换的程序。我需要的日志功能是尽可能快,但要知道,网络被认为是缓慢的。从单独的线程发送UDP数据有什么好处,或者发送UDP只是一个快速调用,因为不需要设置或等待(假设我预先打开了套接字)? 如果它立即返回,我可以接受,但是如果它在内部等待一些I/O资源,这可能是个问题。是吗?可能。要防止它等待,只需将套接字设置为非阻塞。 你可能有兴趣看看。如果你没有发送大量[我指的是每分钟兆字节]的数据[或非常频繁](每分钟数百个数据包),我希望发送(或写入)会相当快 这需要很长时间的

我有一个通过UDP记录状态切换的程序。我需要的日志功能是尽可能快,但要知道,网络被认为是缓慢的。从单独的线程发送UDP数据有什么好处,或者发送UDP只是一个快速调用,因为不需要设置或等待(假设我预先打开了套接字)?

如果它立即返回,我可以接受,但是如果它在内部等待一些I/O资源,这可能是个问题。是吗?

可能。要防止它等待,只需将套接字设置为非阻塞。

你可能有兴趣看看。

如果你没有发送大量[我指的是每分钟兆字节]的数据[或非常频繁](每分钟数百个数据包),我希望
发送
(或
写入
)会相当快

这需要很长时间的唯一原因是,如果您提供的数据超过了网络所能接收的数据量,那么内核必须等待空闲缓冲区插槽可用


与所有与绩效相关的事情一样,衡量总是比在互联网上提问更好。。。我认为,在现代PC机上,一个
sendmsg
调用对于一个小数据包来说大约是几百纳秒,如果数据包超过几十个字节,最大可达几千字节,则大约每8个字节多一纳秒。当达到数百KB时,计时将增加3-10倍

站台?Linux或Windows或其他?@Eric两者都有,但主要的是Windows。这有关系吗,或者这只是一个一般性的“你应该经常提到平台”@baruch:Sockets在Windows和POSIX之间有所不同。对于这两种平台,“DoItBlock?”的一般答案可能是相同的,但防止它这样做的代码可能会有所不同。