【发布时间】:2012-01-25 08:43:01
【问题描述】:
我正在编写一个在 3 层上运行的应用程序,每层都有多个实例并形成类似网格的关系。
例如。让我们考虑一个 Matrix 类型的情况:
L11 L12
L21 L22 L23 L24
L31 L32 L33
L11 与 L21,L22,L23,L24 有连接
L21 与 L21,L22,L23,L24 有连接
L21与L11,L12,L31,L32,L33...等有连接
目前我正在使用 UNIX 域套接字与 select 调用进行通信(以确定数据的来源)。选择调用超时如何影响 CPU 使用率??
最好为每个连接生成一个新线程还是坚持选择模型。通常,L1 的水平可扩展性可能约为 5,L2 约为 5,L3 约为 10。
如果传递给 select 的位字段很高,那么 select 系统调用是否会受到惩罚? 如果是多线程应用程序,是使用阻塞系统套接字还是非阻塞?
UNIX-Domain socket 中的 UDP/TCP 有区别吗??
注意:我将使用 12-24 核的系统...可能这就是让我想到为什么不使用单独的线程而不是选择调用的原因..
注意 2:Unix Domain Sockets 中会有缓冲区溢出吗?作为 据我所知,这些都是无损且无序的......
【问题讨论】:
-
两者都可以。在程序开始时启动 N 个线程,每个物理处理器一个。然后让每个线程以类似选择的方式处理传入连接。主线程将连接分配给子线程进行管理。
-
您的选项是可能的两种性能最低的 I/O 模型,您要问哪个性能最好?如果您关心性能,为什么还要考虑“选择循环”或“每个连接的线程”?这些是您不关心性能时选择的模型。
标签: c++ performance unix network-programming