为什么Java在高速交易系统上比C ++更好? -efinancialcareers


公认的智慧是,如果您要构建一个高速交易系统,则可能要使用C ++而不是Java: 它更接近底层,因此速度更快(延迟更短)。但是,该行业中的一些领先人物表示不同意。 
Chronicle Software的首席执行官Peter Lawrey知道有关低延迟编程的一两件事。劳瑞(Lawrey)是巴克莱(Barclays)的前一名交易绩效工程师,以及对冲基金Millennium Management的 开发人员/研究员。他于2013年创立了Chronicle,致力于高速交易系统。该公司拥有10家一级投资银行 和多家大型对冲基金客户。
从历史上看,Chronicle为希望建立低延迟交易系统的客户提供咨询服务。但是,最近它的重点是提供咨询服务,并将其称为“通用的可定制[交易]基础结构”包,以供客户迭代。该软件包使用Java编码。
Lawrey说:“如果您有无限的时间和资源,那么最好的速度解决方案将用FPGA编码。” Lawrey指的是直接编码现场可编程门阵列的语言。“如果您仍然有很多时间和资源,并且想要创建多个交换适配器,则可以选择C ++。-但是,如果您想参与20多个交换,可以迅速推向市场,并进行持续的性能调整,您将选择Java。”
Lawrey说,C ++的问题在于它的易失性:“如果您不是一个好的C ++程序员,那么您会全力无意识地将整个项目推向崩溃。” 举例来说,劳里(Lawrey)指出了他在一家投资银行遇到的系统。它是用C ++编写的,并且应该很快,但是Lawrey说,银行的开发人员团队将大部分时间都花在了崩溃报告上,并试图重新猜测C ++出了什么问题。因此,他说,在Java上运行的系统元素要快得多。他说:“他们正在用Java添加指标,以了解C ++系统将要做什么。” “这是我职业生涯中最落后的事情之一。”  
但是,这并不意味着所有Java代码都很快。Chronicle的系统是建立在Lawrey描述为“类似于C的Java”的基础上的,他鼓励人们在其中编写低延迟系统。 
Lawrey说:“我们的编码方式更像C ++,而不是Java。” “从本质上讲,我们使用人为设计的Java形式,避免了所有使事情变慢的Java构造。我们仅使用快速高效的构造,并且避免了所有垃圾。” Lawrey说,通过简化Java并切换到非常低级的代码,可以大大加快工作速度。有时,这仅仅是一个更好的诊断问题:“通过简单地更改代码的配置,我们已经能够将99.9%的延迟减少25倍。” 
 
低延迟Java的唯一问题是,大多数经验丰富的Java程序员都在努力应对新的范例。Lawrey说:“许多使用Java编程的人习惯于在延迟不是标准的环境中工作。” “他们可能有15到20年的经验,但是他们对低级代码不了解,只对需要发生的最重要的事情没有思想。” 
Chronicle以这种低级Java形式指导客户自己的开发人员。它还雇用了十名自己的Java专业开发人员,并且将在全球范围内推广其平台时寻求进一步的扩展。劳里说,这种对类似于C的Java的重视可能使其难以招募。他说:“我们首先从交易大厅雇用人员,但最近又雇用了硕士和博士学位的学生。”
即便如此,许多接近《纪事报》的候选人都不适合这份工作。Lawrey说:“大多数Java开发人员都是Web开发人员,习惯于对他们可以看到的东西进行建模。” “但是在交易系统中,您关心的是看不到的延迟,它们甚至都不是典型的延迟-即使是一毫秒也很重要。工作是非常理论化和抽象化的,很难直观地看到这是怎么回事。”