- 主题:问个网络传输构架的问题
场景:
一台机器上有很多进程,每个都是对延时非常敏感,敏感到线程切换都要扣。
然后这些进程都有些数据要通过网络传输,现在的模式是每个进程内部单独开socket,连网络,网络模型用的是iocp.
现在观察到的问题是,因为每个进程都开一个socket,所以我每个进程都要分配一个线程给socket,然后用的又是iocp模型,user和kernel的数据交换很多。
现在的想法是打算每个进程拿一个shared memory和一个统一的网络传输进程通信,网络传输进程用死读统一发送接收。不过感觉shared memory坑也不小,不知道性能能不能有所提高
--
FROM 122.234.62.*
我现在的问题不是在网络传输的延时上,是在因为网络传输产生的user-kernel切换上。
网络传输本身对延时要求不高,只不过因为要顾及网络传输导致进程内部低延时模块被网络传输的user-kernel切换抢占。
所以才会想把网络网络传输统一到一个进程上,其他进程把数据通过shared-memory交给这个进程统一网络传输
【 在 ylh1969 的大作中提到: 】
: 线程切换是微秒级,在这个尺度上,
: 1.网络延时本身不靠谱。ethernet和WiFi都不保证延时。
: 2.TCP/IP协议也不保证延时。UDP稍好,又不可靠。
: ...................
--
修改:ziqin FROM 220.191.38.*
FROM 220.191.38.*
所以我的想法就是把每个进程里的网络模块剥离出去单独做一个进程,然后每个进程通过共享内存和这个网络进程通信,我记得绑定cpu只能以进程为单位吧?
【 在 ilovecpp 的大作中提到: 】
: 需要硬实时的话,windows和linux内核无论如何都无法满足。只能静态划分一部分cpu核另外跑一个实时内核,把你需要实时的模块移过去。
--
FROM 122.224.174.*