- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在对低延迟网络进行一些基本的谷歌搜索之后,我得出了以下列表,其中列出了程序员和系统设计人员在着手使用低延迟网络时应该考虑的事项:
硬件、系统和协议(protocol)的设计必须一起考虑
使用 UDP 而不是 TCP 开发协议(protocol),并在应用层实现简单的 ack-nak、重发逻辑
减少在线下使用和打包数据的进程或线程的上下文切换次数(最好为零)
使用操作系统的最佳选择器(select、kqueue、epoll 等)
使用具有大量板载缓冲区 (fifo) 的优质 NIC 和交换机
使用多个 NIC,专门用于下游和上游数据流
减少其他设备或软件生成的 IRQ 的数量(简而言之,如果不需要则删除它们)
减少互斥锁和条件的使用。而是尽可能使用无锁编程技术。利用架构的 CAS 功能。 (无锁容器)
考虑单线程而不是多线程设计 - 上下文切换非常昂贵。
了解并正确使用架构的缓存系统(L1/L2、RAM 等)
更愿意完全控制内存管理,而不是委托(delegate)给垃圾收集器
使用质量好的线缆,线缆尽量短,减少缠绕和 curl 的次数
我的问题:我想知道其他 SOer 认为在着手低延迟网络时还有哪些重要的事情。
请随意批评以上任何一点
最佳答案
电缆质量通常有点像转移注意力。我会考虑更多关于连接网络分析器以查看您是否获得足够的重新传输来关心。如果你得到很多,请尝试隔离它们发生的位置,并更换导致问题的电缆。如果您没有收到导致重新传输的错误,则电缆(实际上)对延迟没有影响。
NIC 和(尤其是)交换机上的大型缓冲区本身不会减少延迟。事实上,要真正最大限度地减少延迟,您通常希望尽可能使用最小 缓冲区,而不是更大的缓冲区。位于缓冲区中而不是立即处理的数据会增加延迟。说实话,这很少值得担心,但仍然如此。如果你真的想要最小化延迟(并且不太关心带宽)你最好使用集线器而不是交换机(有点难以找到,但绝对低延迟只要网络拥塞足够低)。
多个 NIC 可以极大地提高带宽,但它们对延迟的影响通常非常小。
编辑:不过,我的主要建议是了解规模。将网络电缆减少一英尺可以节省大约一纳秒 - 与通过几条汇编语言指令加快数据包处理的一般顺序相同。
底线:与任何其他优化一样,要取得很大进展,您需要先测量出现延迟的位置,然后才能采取很多措施来减少延迟。在大多数情况下,减少电线长度(举个例子)不会引起足够的注意,仅仅是因为它起步很快。如果某件事开始需要 10 微秒,那么您无法将其加速超过 10 微秒,因此除非您的事情快到 10 微秒占您时间的很大一部分,否则不值得攻击。
关于java - 低延迟网络技术和银弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065262/
我的 Linux Centos Apache 服务器的性能有问题。我有一个程序(用 c 语言编写)可以同时执行许多 http 请求。这个过程本身看起来非常有效,就好像我可以同时向外部服务器发出 500
我想知道如何将并行端口上的数据引脚设置为高电平和低电平。我相信我可以使用 PyParallel 来实现此目的,但我不确定如何设置特定的引脚。 谢谢! 最佳答案 您在这里谈论的是软件-硬件接口(inte
让我有一个像这样的日期时间索引的数据框: date_time open high low close vol 2018-05-13 18:00:00 70.
在 emacs Octave 模式下,当我输入 M-x run-octave 时,命令会卡住,所以我使用 C-g 进行转义。我可以用 C-x b 切换到 *Inferior Octave* 缓冲区,但
我正在 sklearn 中运行 gridsearchCV,尝试使用此代码找到最佳模型参数。 modelDNN= KerasRegressor(build_fn=build_DNN_model, epo
美好的一天。我想知道 android 存储是否低,它会影响应用程序性能吗?因为同一个应用程序在另一台设备上运行速度很快,而同样的应用程序在另一台设备上非常滞后,后者有 12GB 内存中的 2GB 可用
所以我在列卡上有一个带有索引的表 当我运行时 SELECT COUNT(DISTINCT(card)) FROM table 它返回 490 个不同的条目 但是当我运行的时候 SHOW INDEXES
我正在使用手动方法将二进制转换为十进制。此代码在最后一位为高的情况下工作正常,例如:1001。当最后一位为零 [低] 时会出现错误。例如:1010 应该给出 10 但给出 5,因为没有考虑最后一位。有
我一直在努力优化我的站点和数据库,并且我一直在使用 mysqltuner.pl 来帮助解决这个问题。除了表缓存命中率,无论我在 my.cnf 中将它提高多高,我几乎都得到了正确的结果,我仍然命中大约
深入研究 sprite kit (xcode 5)。我正在使用两个示例程序,1. 创建新项目时包含的默认宇宙飞船示例和 2. 我下载的 Adventure Game。 在 iOS 模拟器中运行这些示例
编辑: 感谢大家在这里提供答案,项目已完成。 https://github.com/0xyg3n/ProcessDaemon/ 如果有人想出可能会更好的多线程解决方案,我想。 我是 C# 的新手,我想
我有一个交换 Word 变量的字节(低/高)的过程(它与 System.Swap 函数执行相同的操作)。该过程在编译器优化关闭时有效,但在编译器优化打开时无效。有人可以帮我解决这个问题吗? proce
我以前听说过这些术语描述语言,例如 C 并不是一种低级语言,C++是中级语言,而Python是一种高级语言。我知道它必须与代码的编译方式以及代码的编写方式有关。但是我想知道的是,什么将语言定义为这三类
我有一个关于 NoSQL 类型数据库的问题,特别是 MongoDB,但它通常适用于大多数键值或基于文档的存储。 NoSQL 的一些卖点是速度和可扩展性,但在我看来,与关系数据库相比,开销很大。 你有很
如果没有此代码,fps 为 60-65。但是当我使用这段代码时,fps 下降到 50。 另一个问题是某些设备上的 FPS 太低。然而,游戏非常简单。我对所有形状使用 ShapeRenderer。游戏在
您好,我的名字是 Ryan,我目前正在开发自己的 2D java 游戏。目前游戏世界中有很多物体。游戏重新开始时,世界会加载 100 棵随机放置的树木,这些树木是使用数组列表和树类制作的。我的游戏使用
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我刚刚将我的 Heroku postgres 数据库从 Kappa 计划(800MB RAM,postgres 9.1)升级到 Ronin 计划(1.7GB RAM,postgres 9.2),但性能
现在我正在使用我的 NSDictionary 并运行所有值的循环以找到低值、高值和计算平均值。 由于我是IOS 的新手,所以我想问问是否有更好的方法来做到这一点。有没有? 谢谢。 最佳答案 这个问题的
我目前正在使用 genuino 101 进行一个项目,我需要通过 i2c 读取大量数据,以填充任意大小的缓冲区。从下图中我可以看到读取请求本身只需要大约 3毫秒,写请求大约 200 纳秒。 但是在同一
我是一名优秀的程序员,十分优秀!