gpt4 book ai didi

java - 低延迟网络技术和银弹

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:41 29 4
gpt4 key购买 nike

在对低延迟网络进行一些基本的谷歌搜索之后,我得出了以下列表,其中列出了程序员和系统设计人员在着手使用低延迟网络时应该考虑的事项:

  1. 硬件、系统和协议(protocol)的设计必须一起考虑

  2. 使用 UDP 而不是 TCP 开发协议(protocol),并在应用层实现简单的 ack-nak、重发逻辑

  3. 减少在线下使用和打包数据的进程或线程的上下文切换次数(最好为零)

  4. 使用操作系统的最佳选择器(select、kqueue、epoll 等)

  5. 使用具有大量板载缓冲区 (fifo) 的优质 NIC 和交换机

  6. 使用多个 NIC,专门用于下游和上游数据流

  7. 减少其他设备或软件生成的 IRQ 的数量(简而言之,如果不需要则删除它们)

  8. 减少互斥锁和条件的使用。而是尽可能使用无锁编程技术。利用架构的 CAS 功能。 (无锁容器)

  9. 考虑单线程而不是多线程设计 - 上下文切换非常昂贵。

  10. 了解并正确使用架构的缓存系统(L1/L2、RAM 等)

  11. 更愿意完全控制内存管理,而不是委托(delegate)给垃圾收集器

  12. 使用质量好的线缆,线缆尽量短,减少缠绕和 curl 的次数

我的问题:我想知道其他 SOer 认为在着手低延迟网络时还有哪些重要的事情。

请随意批评以上任何一点

最佳答案

电缆质量通常有点像转移注意力。我会考虑更多关于连接网络分析器以查看您是否获得足够的重新传输来关心。如果你得到很多,请尝试隔离它们发生的位置,并更换导致问题的电缆。如果您没有收到导致重新传输的错误,则电缆(实际上)对延迟没有影响。

NIC 和(尤其是)交换机上的大型缓冲区本身不会减少延迟。事实上,要真正最大限度地减少延迟,您通常希望尽可能使用最小 缓冲区,而不是更大的缓冲区。位于缓冲区中而不是立即处理的数据会增加延迟。说实话,这很少值得担心,但仍然如此。如果你真的想要最小化延迟(并且不太关心带宽)你最好使用集线器而不是交换机(有点难以找到,但绝对低延迟只要网络拥塞足够低)。

多个 NIC 可以极大地提高带宽,但它们对延迟的影响通常非常小。

编辑:不过,我的主要建议是了解规模。将网络电缆减少一英尺可以节省大约一纳秒 - 与通过几条汇编语言指令加快数据包处理的一般顺序相同。

底线:与任何其他优化一样,要取得很大进展,您需要先测量出现延迟的位置,然后才能采取很多措施来减少延迟。在大多数情况下,减少电线长度(举个例子)不会引起足够的注意,仅仅是因为它起步很快。如果某件事开始需要 10 微秒,那么您无法将其加速超过 10 微秒,因此除非您的事情快到 10 微秒占您时间的很大一部分,否则不值得攻击。

关于java - 低延迟网络技术和银弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065262/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com