【问题标题】:Lots of ports with little data, or one port with lots of data?很多端口数据很少,还是一个端口数据很多?
【发布时间】:2014-05-05 13:52:49
【问题描述】:

我一直在使用名为 ROS (http://www.ros.org) 的系统进行检查。

在 ROS 的网络节点之间发送了许多不同类型的数据。 您定义了要在消息中发送的数据结构,ROS 将处理打开两个节点之间的特定端口,该端口仅发送该数据结构。

所以如果有 5 个不同的消息,就会有 5 个不同的端口。

与这种情况相反,我见过其他平台只是将所有不同的消息推送到一个端口。这意味着需要进行某种复用/解复用(通过在接收端进行某种消息解析来完成)。

我想知道的是......从性能角度来看哪个更好?

操作系统是否会根据端口快速切换,以便像 ROS 这样的系统不必做太多工作来计算消息中的内容并进行解释?

打开大量端口是否意味着大量内核调用速度变慢,而必须计算和转换消息类型的成本最终会超过在端口之间切换所花费的时间?

当它以高速率扩展到大量数据和许多不同的消息类型时,将会有很多端口。所以我想,在扩展这些拓扑中的每一个时,性能将是选择工作方式的一个重要因素。

我还应该指出,这些节点通常存在于一个小型网络上,或者大部分时间存在于一台机器上,其中网络被用作进程间通信的一种力量。所以传输时间在整个系统时序中只是一个很小的因素。

ROS 作为一种机器人架构,可能每个传感器和执行器都有一个节点,因此根据您系统的复杂性,我们可能会讨论 20-30 个节点在 10-100Hz 之间推送小型(100 字节左右)数据

【问题讨论】:

    标签: networking network-programming


    【解决方案1】:

    这取决于。我不知道 ROS 的具体细节,但在网络中它归结为以下限制:

    • 距离:光速很快,但随着距离的增加,它开始产生影响

    • 协议开销:面向连接与无连接

    在操作系统方面,维护一个可用端口列表并没有太大的开销 - 当然这是有成本的但是一切都是相对的:如果您谈论的是分布式系统具有长距离链接,那么很容易争辩说,与管理通信质量相比,循环通过操作系统网络端口的关注度较低。

    如果没有更具体的问题,我就到此为止。

    【讨论】:

    • 感谢 jldupont,我会用更多细节更新问题。我没有考虑过那个级别的问题
    【解决方案2】:

    我没有这方面的任何数据,但多核系统可以更有效地处理多个端口,而不是在程序中进行多路分离,这似乎是合理的。

    【讨论】:

    • 我也想是这种情况……但谁知道底层操作系统会如何处理它
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多