【发布时间】:2012-10-03 19:49:03
【问题描述】:
如果我有两个 Linux 机器,并且我正在编写一个 C/C++ 程序以在一个机器上发送消息并在另一个机器上接收,那么最快的方法是什么?
我不确定我听到的各种套接字/网络技术是否只是底层技术的简单包装,或者它们是否是替代可能性。我只想知道最接近我可以从我的应用程序中实现的“裸机”。
我在想最快的方法是将我的程序编写为驱动程序并将其加载到内核中。但是,我仍然需要知道最快的套接字实现才能与这个想法一起使用。
【问题讨论】:
-
这里有一些非常明显的选择,例如 TCP。您所指的“各种套接字/网络技术”有哪些?
-
我想归结为“快”有多快? TCP 不是实时的,但是相邻的 2 个盒子之间的有线 GB 连接非常快。我想如果您需要快速和实时,您可能希望将它们都放在同一个 PCI/PCIe 总线上。我已经在实时工业环境中使用过它,但除非我不得不这样做,否则我不想弄乱它;-0
-
我猜你会浪费很多时间来尝试过度优化。尝试“裸机”的额外开发和维护量几乎肯定不会产生显着收益,而且绝对比购买更快的机器更划算。
-
我不认为Nagle算法用于UDP,仅用于TCP。但即使在 TCP 中,您也可以使用
setsockopt和TCP_NODELAY禁用它。 -
什么是“快”?低延迟还是高吞吐量?您的数据有多大?
标签: c++ c linux sockets kernel