首页 文章

我应该使用哪种语言进行实时应用

提问于
浏览
2

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

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

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

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

有什么建议?

11 回答

  • 0

    您必须使用的实时约束到底是什么?微秒,毫秒,秒?

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

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

    总而言之,C可能会为您提供易用性和了解底层系统正在做什么的最佳组合 . 如果您非常了解C,那么如果使用严格的编码标准,它也是合适的 . 如果它具有极高的性能,或者具有极高的可预测性要求,那么您可能需要删除汇编程序代码,但这不太可能,并且编译器可能比您更好地理解CPU管道,并且它对于几千行代码而言,这将是不切实际的 .

    如果当然,如果你只是需要一些相对较快的,那么我不是实时性应该是你在语言选择中的主要考虑因素,而是适当的库和工具的可用性,开发人员团队的经验,对应用程序的适用性等等会是更重要的考虑因素 .

  • 7

    我不同意“实时”是一个模糊的定义 . 更可能的是,人们只是不明白其含义 . 实时是指系统的响应时间与实际系统相同 . 实际上,您可以使系统比实时更快,从而导致类似于系统慢于实时的问题 .

    因此,我不相信您要求使用语言来引用“实时”应用程序,就像真正快速的应用程序一样 .

    查看language shootout,看看哪种测试最符合您的设计空间;但是,我的直觉回答是使用C.

  • 0

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

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

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

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

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

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

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

  • 6

    现在,什么是“实时”应用程序的定义非常模糊 . 您的实时约束可能是几十个月,具体取决于应用程序,您对语言,操作系统和工具的选择都将取决于这些因素 .

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

  • 3

    目前,语言选择imo没有它在使用不需要大量处理能力的客户端/服务器应用程序时所使用的那么重要 . 只要您知道如何构建良好的体系结构,Java,C#,C / C将表现相似(显然本机语言将具有一些优势) . 我会考虑易用性和每种语言可用的有用库量来做出决定 . 我不知道你的计算究竟需要什么或者你正在处理什么股票信息,但是看看库和GUI开发工具并从那里开始......

  • 6

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

  • 0

    我来看看Erlang吧!他们的架构似乎非常适合这样的应用程序 .

  • 2

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

  • 1

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

  • 2

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

    你在谈论什么样的计算?

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

  • 0

    我也实现了这样一个系统,我认为RoadWarrior实际上总结得很好 .

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

相关问题