c - 在 Linux 上使用共享内存进行低延迟数据包处理?

标签 c linux performance udp latency

如果我要在 Linux 上接收 UDP 数据包(并且我不介意更改一些源代码),我的应用程序读取数据包的最快方式是什么?

我是否要修改网络堆栈,以便在收到 UDP 数据包后将其写入共享内存并让应用程序访问该内存?

有没有办法让堆栈通知应用程序使用react,而不是让应用程序不断轮询共享内存?

欢迎任何建议/更多资源 - 我只看到:

http://www.kegel.com/c10k.html

最佳答案

如果延迟是一个问题并且默认的 UDP 网络堆栈没有按您希望的那样执行,那么请尝试使用不同的现有(可安装)网络堆栈。

例子,试试UDP Lite ,与标准的 UDP 堆栈相比,这个特殊的堆栈不对 UDP 数据报执行任何校验和,从而以向应用层提供损坏的数据报为代价减少了延迟。

旁注:您不需要有“轮询”机制。阅读 select 的手册(它可能是 pselectppoll 的衍生物),有了这样的 API,内核将“唤醒”你的应用程序一旦管道中有可读或可写的内容。

关于c - 在 Linux 上使用共享内存进行低延迟数据包处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420302/

相关文章:

python - 在 ubuntu 中设置 OpenCV 2.3 w/python 绑定(bind)

Mysql性能: A big query that always stuck/slow

python - 为什么嵌套函数比非嵌套函数慢这么多?

c - 奇怪的 scanf 行为

c - 从 pthread 设置进程的退出状态

c - char指针赋值时刻的区别

linux - 为什么 strace 不记录我所有的系统调用?

linux - 如何使用另一个文件中已经存在的完成来扩展 bash-completion?

c - 有没有更好的方法来优化 lennard jones 势函数?

c - "__G"是什么意思?