在Windows中使用C++的低延迟交易系统?

Jon*_*Jon 14 c++ linux windows

似乎所有主要的投资银行都在Unix(Linux,Solaris)中使用C++来实现低延迟/高频服务器应用.为什么Windows通常不用作此平台?是否有技术原因导致Windows无法竞争?

caf*_*caf 15

在用于算法交易非常低延迟系统的性能要求是极端的.在这种环境中,微秒计数.

我不确定Solaris,但在Linux的情况下,这些人正在编写并使用低延迟补丁和整个内核的自定义,来自网卡驱动程序.这并不是因为有一个技术原因导致无法在Windows上完成,而是有一个实用/合法的 - 访问源代码,以及通过更改重新编译它的能力.


Rya*_*ler 12

从技术上讲,没有.但是,有一个非常简单的商业原因:其余的金融世界都在Unix上运行.银行在AIX上运行,股票市场本身在Unix上运行,因此,在金融世界中找到习惯于Unix环境而不是Windows环境的程序员更容易.

  • 这绝对不是找到有Windows知识的人.我向你保证,操作系统相关知识是进行这种开发所需知识的1%,如果需要,在这个领域工作的每个人都可以切换到任何操作系统. (4认同)
  • 在标准环境中可能也是如此,但在非常低延迟的环境中,必须深入了解操作系统,以便能够保持代码的开销,为特定的系统调用使用最佳系统调用任务,熟悉特定的怪癖和陷阱. (2认同)

rjw*_*rjw 10

(我在投资银行工作了8年)事实上,很多银行所谓的低延迟都是用Java完成的.甚至不是实时Java - 只关闭了GC的普通Java.这里的主要技巧是确保你已经运行了足够的所有代码,以便在将特定的VM切换到prod之前运行jit(因此你有一些运行几分钟的启动循环 - 以及热故障转移) .

使用Linux的原因是:

熟悉

远程管理仍然更好,影响也很小 - 它对机器上的其他进程影响很小.请记住,这些系统通常位于交易所,因此指向机器的链接(来自您/您的支持团队)可能会比您的普通数据中心更糟.

可调性 - 将swappiness设置为0,让JVM预分配大页面以及其他低级别技巧的能力非常有用.

我相信你可以让Windows工作得令人满意,但这样做并没有什么大的优势 - 正如其他人所说的那样,你挖走的任何员工都必须重新发现他们所有的延迟破坏技巧,而不是仅仅运行一份清单.


Ton*_*roy 5

Linux / UNIX对于并发远程用户更有用,这使得在系统中编写脚本更加容易,在日志上使用标准工具,例如grep / sed / awk / perl / ruby​​ / less ... ssh / scp ...所有这些就在那里。

例如,还有一些技术问题:要测量Windows上的经过时间,您可以在基于Windows时钟滴答的一组函数和基于硬件的QueryPerformanceCounter()之间进行选择。前者是每10到16毫秒递增一次(注意:一些文档暗示了更高的精度-例如,GetSystemTimeAsFileTime()中的值测量为100ns,但它们报告时钟滴答的相同100ns沿直到再次滴答为止)。后者-QueryPerformanceCounter()-存在令人头疼的问题,其中不同的内核/ CPU可以报告自启动以来的时钟差异,这是由于系统启动期间在不同时间进行预热而相差几秒钟。MSDN将其记录为可能的BIOS错误,但这很常见。因此,谁想在可以实现以下目标的平台上开发低延迟交易系统?不能正确检测?(有解决方案,但找不到在boost或ACE中方便使用的软件)。

许多Linux / UNIX变体具有许多易于调整的参数,可以针对单个事件的延迟与负载,时间片大小,调度策略等下的平均延迟进行权衡。在开源操作系统上,还能够保证当您认为某些事情应该比原先更快时,请参阅该代码,并且知道(潜在的)庞大的社区已经并且正在如此批判地工作-在Windows中,显然主要是要分配给这些人员看它。

在FUD /信誉方面-有点无形,但是是选择OS的重要原因-我认为行业中的大多数程序员会更信任Linux / UNIX以提供可靠的调度和行为。此外,Linux / UNIX在崩溃率方面享有声誉,尽管如今Windows相当可靠,并且Linux具有比Solaris或FreeBSD更易变的代码库。


Bar*_*ter 5

原因很简单,10 到 20 年前,当此类系统出现时,“硬核”多 CPU 服务器仅适用于某种 UNIX。这些天,Windows NT 还在幼儿园。所以原因是“历史的”。

现代系统可能是在 Windows 上开发的,现在这只是品味问题。

PS:我目前正在研究这样的系统之一:-)