【问题标题】:Which Language I should use for real time application我应该使用哪种语言进行实时应用
【发布时间】:2008-12-29 11:07:05
【问题描述】:

我将开发实时应用程序,它将接收股票市场数据并进行一些处理,然后传播到客户端应用程序。 我决定在服务器和客户端之间划分计算,服务器将进行基本计算,然后将基本数据发送到计算最终变量的客户端。

我决定使用 C# 开发客户端应用程序(仅限 GUI)和使用 C++ 计算最终变量的组件(称为:变量计算器)。 在 C++ 中开发“变量计算器”的目的是为了模块化。 例如,如果我发现在客户端计算变量需要更多时间,我可以在服务器端使用相同的模块。

我还将使用标准 C++ 开发服务器端。

注意事项: 服务器应处理一组消息并在不到一秒的时间内将其发送给客户端 最大消息数出现在市场开始时 100,000 条消息

有什么建议吗?

【问题讨论】:

  • 为什么不在服务器上也使用 C#?
  • 是的,我同意 Cletus 的观点。为什么这里有 2 种语言,这总是会引入复杂性。 C++ 本质上并不比 C# 更模块化。
  • 我将在服务器端使用 C++,因为有很多现成的 C++ 组件我会使用它们
  • @Ahmed:我认为您使用“实时”一词为您的问题制造了很多麻烦;看看en.wikipedia.org/wiki/Real-time 我怀疑你不是真的在谈论实时系统?
  • @krosenvold:你的意思是股票数据发布不是实时系统吗?

标签: language-features real-time


【解决方案1】:

您必须使用的实时约束究竟是什么?微秒、毫秒、秒?

它真的需要实时,还是仅仅需要高性能?

假设它确实需要实时,语言不太可能是系统中最重要的东西,您很可能会受到运行时环境的其余部分的限制。例如:您使用的库、网络堆栈、网络协议、操作系统、CPU 架构、内存、缓存等。

话虽如此,C 语言可能会为您提供易用性和了解底层系统在做什么的最佳组合。如果你非常了解 C++,那么它也适合与严格的编码标准一起使用。如果它具有极高的性能,或者具有极高的可预测性要求,那么您可能需要使用汇编代码,但这不太可能,而且编译器可能比您对 CPU 管道有更好的理解,而且它对于超过几千行代码的任何东西都是不切实际的。

当然,如果您只需要相对较快的速度,那么我不认为实时性应该是您在选择语言时的首要考虑因素,而是合适的库和工具的可用性、开发人员团队的经验、对应用等将是更重要的考虑因素。

【讨论】:

    【解决方案2】:

    我不同意“实时”是一个模糊的定义。更有可能的是,人们只是不明白这是什么意思。实时是指系统的响应时间与现实世界的系统相同。您实际上可以让系统比实时速度更快,从而导致类似于系统比实时速度慢的问题。

    因此,我认为您要求的语言使用并不是针对“实时”应用程序,而是针对真正快速的应用程序。

    查看language shootout,看看在最接近您的设计空间的各种测试中什么是最好的;但是,我的直觉答案是使用 C。

    【讨论】:

    • ...实时计算 (RTC) 是对受“实时约束”约束的硬件和软件系统的研究,即从事件到系统响应的操作期限... (维基百科)这和我说的有什么不同?
    • 我认为丹是对的,克罗森沃尔德。实时意味着系统的响应应该在一定时间内才能发挥作用或避免灾难。而且我在原始问题中没有看到任何实时要求。
    • 您说的“响应时间与真​​实系统相同”。 “真实系统”是什么意思?是的,金融系统是关键的实时系统。不是 50hz 实时视频,但必须满足重要的时间限制才能使系统生效。
    • @Roddy 我落入了同样的陷阱,最初投了反对票。因为不仅是我,我编辑了 Dan 的帖子。
    • @Roddy 我正在考虑模拟,因为我的大部分经验都在那个领域。
    【解决方案3】:

    在投资银行工作了近 30 年。我写过很多这样的应用程序。您需要解决的潜在问题可能不是实时性能,而是延迟和吞吐量。

    在这种情况下,延迟是关于减少网络延迟,语言选择不是很相关。

    吞吐量是关于长时间持续的大处理能力,而性能是关于短期内非常大的处理能力。尽管在这种情况下语言选择比延迟更重要,但它通常并不像您想象的那么重要。

    在这两者中,通常最好先设计尽可能低的延迟。吞吐量问题可以在以后的开发中通过各种技巧来解决,但摆脱现有设计中的高延迟要困难得多。

    所以我会在客户端和服务器上都使用 C#,至少在概念验证方面是这样。没有必要引入额外的复杂性(另一种语言)来解决不太重要的问题。

    编辑:我注意到您编辑了您的问题,说服务器需要在不超过 1 秒的时间内处理多达 100K 条消息。我怀疑您是否可以使用软件来实现这一点,但您可以使用a combination of software and hardware 来实现。

    如果您确实需要这种级别的低延迟(而且我在 30 年的业务中从未需要它),那么语言的选择并不像拥有非常高的带宽和超高的带宽那么重要。优化和并行化算法。但我首先会质疑是否需要了解它们的真正含义——我敢打赌这不是他们所说的。

    【讨论】:

      【解决方案4】:

      如今,“实时”应用程序的定义相当模糊。您的实时限制可能是几个月的微秒,具体取决于应用程序,您对语言、操作系统和工具的选择都取决于这些因素。

      在这种情况下,我不明白为什么您也不应该在服务器端使用 C#。也许有你没有提到的限制,但从你所说的来看,我认为没有理由在你的问题中引入第二语言。

      【讨论】:

        【解决方案5】:

        如今,当涉及到不需要大量处理能力的客户端/服务器应用程序时,语言选择 imo 的重要性不如它使用的语言那么重要。只要您知道如何构建良好的体系结构,Java、C#、C/C++ 的性能类似(显然本机语言会有一些优势)。我会考虑易用性和每种语言可用的有用库的数量来做出决定。我不知道您的计算究竟需要什么或您正在处理什么库存信息,但请查看库和 GUI 开发工具,然后从那里开始......

        【讨论】:

          【解决方案6】:

          Scala、Erlang 或 Java。但我强烈建议使用 Scala,因为它具有良好的语法和高可扩展性。

          【讨论】:

            【解决方案7】:

            我会看看 Erlang !他们的架构似乎非常适合此类应用程序。

            【讨论】:

              【解决方案8】:

              Dan 的直觉回答是错误的,看看他发布的网站就很清楚现在 C++(gnu/intel 实现)如何优于 C 实现

              【讨论】:

                【解决方案9】:

                您可以查看Adaptive Communications Environment,这是一个可移植的服务器框架,用于用 C++ 编写高性能服务器。 This Stackoverflow posting 有一系列链接来描述它并散布到各种资源。

                【讨论】:

                  【解决方案10】:

                  如果您真的想要低延迟和高吞吐量,我建议您删除服务器内的任何数据处理(计算)。如果您真的想要/需要不在客户端上进行计算,我会设置另一台服务器来提供派生数据的补充数据流。也就是说,您的计算值基于原始/原始 Feed。

                  你在说什么类型的计算?

                  您打算如何处理网络和网络堆栈中的吞吐量?你们有延迟测量工具/嗅探器/endace 卡吗?

                  【讨论】:

                    【解决方案11】:

                    我也实现过这样的系统,我觉得RoadWarrior其实总结的很好。

                    这是消息队列的绝佳应用领域,如果您利用良好的底层 MQ 技术,我相信您几乎可以用任何编程语言,甚至更高级别的解释语言来满足您的吞吐量要求。

                    【讨论】:

                      猜你喜欢
                      • 2011-06-14
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-10-02
                      • 2022-01-27
                      • 2010-11-05
                      • 2022-06-16
                      • 1970-01-01
                      • 2012-11-06
                      相关资源
                      最近更新 更多