问题标签 [low-latency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 Python 中设置 Windows 命令行终端标题
我在 Windows 机器上运行某个 Python 脚本的多个实例,每个实例都来自不同的目录并使用单独的 shell 窗口。不幸的是,Windows 为这些 shell 窗口中的每一个赋予了相同的名称:
是否可以通过 Python 命令将此名称设置为其他名称?
c++ - 用于低延迟大数据交换的多线程 boost C++ 程序设计
我正在尝试通过 C++ 多线程解决网络流问题。
给定一个网络(所有节点都通过弧连接,每条弧连接2个且只有2个结束节点,一个是输入节点,另一个是输出节点,每个节点可以有多个输入弧和输出弧),每个节点需要做一些计算,然后将计算结果数据交换到其连接的输入和输出节点。
多个节点可以组合成一个任务,由一个线程运行。这样就可以将整个网络的计算工作量划分为多个任务。所有这些任务都被推送到一个 boost 线程池中,以便所有线程可以同时运行这些任务。
但是,如果一个节点(在一个线程任务中)需要与另一个节点(在另一个线程任务中)进行数据交换,就会出现同步问题。数据接收方需要等待数据发送方的数据缓冲区中可用的数据。
我的程序需要对网络进行分区,以便尽可能均匀地分配每个线程的任务工作负载。如果所有线程共享一个大数据缓冲区结构,程序并行性不好,因为临界区太大。即使数据结构的一部分(对它们有用)已可用于读取或写入,某些线程也必须等待解锁的一大数据缓冲区结构。
例如,one-large 数据缓冲区结构具有以下缓冲区单元:cell1、cell2、cell3、cell4。
当线程 1 尝试写入单元格 1 时,它必须锁定整个数据缓冲区结构,以便线程 2 无法读取或写入单元格 2,依此类推。
因此,我想根据线程号将一个大数据缓冲区结构分解为多个不同的数据单元,以便每个单元保存一个线程任务所需的数据。
例如,如果我们有 2 个线程,我们创建 2 个数据单元,分别保存 4 个线程所需的数据。如果我们有 4 个线程,我们将创建 4 个数据单元,分别保存 4 个线程所需的数据。等等。
我的问题是:
(1) 如何设计数据单元?你可以看到它的大小是基于线程数的。
(2) 如何减少同步开销?临界区很小,但如果节点间数据交换频率很高,则获取和释放互斥锁的开销可能会很高。
(3)当一个节点的计算完成并且数据被写入它的单元格时,如何通知数据接收节点,使得通知消息只被运行接收节点计算任务的等待线程接收。所有其他不相关的节点和线程不受影响。
该程序对时间非常敏感,应该非常严格地控制消息交换的延迟并尽可能减少。
非常感谢任何帮助。
谢谢
c - 交易应用的低延迟原理是什么?
似乎所有主要的投资银行都在 Unix(Linux、Solaris)中使用 C++ 来实现其低延迟/高频服务器应用程序。人们如何在高频股票交易中实现低延迟?有什么书教如何做到这一点?
android - Android:我可以降低 onTouch 的延迟吗?
我正在开发一个需要高精度触摸处理的应用程序。我希望我的 OnTouchListener 接收尽可能多的 onTouch 事件,这样我就可以准确地看到他们的手指去了哪里。有什么方法可以提高我收到这些事件的频率吗?
tcp - 高频交易 - TCP > UDP?
有人告诉我,对于需要低延迟的高频交易 (HFT) 系统,TCP 是通过 UDP 使用的。有人告诉我,使用 TCP 可以进行点对点连接,而使用 UDP 则不能,但是据我了解,您可以将 UDP 数据包发送到特定的 IP/端口。
本文中使用了几个论点来解释为什么 UDP > TCP 用于游戏,但我可以看到 HFT 的相关性。
为什么 TCP 会是用于 HFT 的更好协议?
(管理员:我之前的这个问题的帖子被默默地删除了,没有任何解释。如果我违反了使用条款,请提醒我这一点,而不是默默地删除这个问题)
c - 为延迟要求高的程序实施快照功能
我们正在开发程序,该程序适用于位于共享内存中的数据。程序要求延迟并处理大量数据。
如果程序失败,我们必须返回上一个工作状态 FAST。
一种方法是从事务日志中读取和处理数据,其中包含从一天开始的事务。但这一点都不快,考虑到事务日志的大小(数百 GB)。
我们现在正在寻找一种方法来创建可以写入磁盘并在程序失败时快速读取的数据快照。但是快照创建不能锁定程序执行,并且该快照中的数据必须是一致的。
如果我们使用本地内存而不是共享内存来保存数据,解决方案将很简单:
- 叉子()
- 将数据写入磁盘
由于linux上的copy-on-write,只会复制更改的数据,所以速度非常快。
但是我们使用的是posix共享内存。
有什么办法可以做到速度和一致性?
keyboard - 按键的平均延迟有多大
我目前正在帮助某人进行反应时间实验。在这个实验中,我们测量了键盘上的反应时间。对于这个实验,重要的是要知道,由于按键和软件处理之间的延迟,可能会引入多少错误。
以下是我已经使用谷歌发现的一些因素:
- USB 总线的轮询频率最低为 125Hz,最高为 1000Hz(取决于设置,请参阅此链接)。
- Windows 中可能有一些额外的键盘缓冲区可能会进一步延迟按键,但我不知道这些背后的逻辑。
不幸的是,无法控制实验的低级逻辑。该实验是用 E-Prime 编写的,E-Prime是一种经常用于此类实验的软件。然而,提供 E-Prime 的公司也提供额外的硬件,他们宣传精确的反应时间。因此,他们似乎意识到了这种影响(但不知道它有多大)。
不幸的是,必须使用标准键盘,所以我需要提供减少延迟的方法。
c# - 调用 Socket.Receive 时防止线程休眠
我正在开发一个通过套接字接收 tcp 数据的低延迟金融应用程序。
这就是我建立套接字连接和接收字节的方式:
我听说当你调用Receive()
一个 Stream 套接字时,调用线程被置于睡眠状态,并在接收到数据时被唤醒。我希望线程全速运行(使用 CPU 容量)。
有没有办法可以使用 Stream 套接字来做到这一点?如果唯一的方法是使用原始套接字,你能提供一个例子吗?
java - Java Netty 负载测试问题
我使用文本协议编写了接受连接和轰炸消息(~100 字节)的服务器,并且我的实现能够使用第 3 方客户端发送大约 400K/秒的环回消息。我为这个任务选择了 Netty,SUSE 11 RealTime,JRockit RTS。但是当我开始基于 Netty 开发自己的客户端时,我面临着吞吐量的急剧下降(从 400K 降至 1.3K msg/sec)。客户端的代码非常简单。请您提供建议或举例说明如何编写更有效的客户端。实际上,我更关心延迟,但从吞吐量测试开始,我认为环回时有 1.5Kmsg/秒是不正常的。PS客户端的目的只是从服务器接收消息,很少发送heartbits。
更新。在服务器端,有一个定期线程写入接受的客户端通道。并且通道很快变得不可写。更新 N2。在管道中添加了 OrderedMemoryAwareExecutor,但吞吐量仍然非常低(大约 4k msg/sec)
固定的。我将 executor 放在整个管道堆栈的前面,它成功了!
python - Mac OSX 的 PyAudiere 替代品?
我正在使用 Python 开发音乐应用程序。我正在使用PyAudiere进行低延迟音频播放,但我发现在 Mac OSX 上工作并不是很容易(根据说明我没有设法编译它,我得到了消息DeviceFrame.cpp:60: error: call of overloaded ‘wxString(const char*)’ is ambiguous
)。是否有另一个适用于 Mac 的优秀 Python 音频框架?我需要能够动态调整音高和音量,以及低延迟;PyPy 兼容性会很好,但不是必需的。