在对低延迟网络进行了一些基本的谷歌搜索之后,我提出了以下程序员和系统设计人员在着手进行低延迟网络时应该考虑的事项列表:
硬件、系统和协议的设计必须一起考虑
使用UDP代替TCP开发协议并实现简单的ack-nak,在应用层重发逻辑
减少消耗和打包数据的进程或线程的上下文切换次数(最好为零)
使用操作系统的最佳选择器(select、kqueue、epoll 等)
使用具有大量板载缓冲区 (fifo) 的优质 NIC 和交换机
使用多个 NIC,专门用于下游和上游数据流
减少其他设备或软件生成的 IRQ 数量(简而言之,如果不需要它们,请删除它们)
减少互斥量和条件的使用。而是尽可能使用无锁编程技术。利用架构的 CAS 功能。(无锁容器)
考虑单线程而不是多线程设计 - 上下文切换非常昂贵。
了解并正确利用架构的缓存系统(L1/L2、RAM 等)
更喜欢完全控制内存管理,而不是委托给垃圾收集器
使用质量好的电缆,电缆尽可能的短,减少扭曲和卷曲的次数
我的问题:我想知道其他 SOers 认为在开始低延迟网络时还有哪些重要的事情。
随意批评以上任何一点