网络 – 大量数据端口,或一个包含大量数据的端口?

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

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

因此,如果有5个不同的消息,将有5个不同的端口.

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

我想知道的是……从绩效的角度来看哪个更好?

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

要么

打开许多端口意味着大量较慢的内核调用,而且必须解决和转换消息类型的成本最终会超过在端口之间切换所花费的时间吗?

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

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

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

最佳答案 这取决于.我不知道ROS的细节,但在网络中,它归结为以下约束:

>距离:光速很快但是在一定距离上它会开始产生差异
>协议开销:面向连接与无连接

在操作系统方面,维护一个空闲端口列表并不是一个很大的开销 – 当然它有成本,但一切都是相对的:如果你在谈论一个带有长距离链路的分布式系统,那么它很容易认为与管理通信质量相比,通过OS网络端口循环是一个较低的问题.

没有更具体的问题,我会在这里停下来.

点赞