Pergunta

Eu estou indo para desenvolver aplicação em tempo real que irá receber os dados do mercado de ações e fazer algum processamento em seguida, dissemina a aplicação cliente. I decidiu dividir os cálculos entre o servidor eo cliente o servidor vai fazer os cálculos básicos, em seguida, enviará os dados básicos para o cliente que calcula as variáveis ??finais.

decidi desenvolver o aplicativo cliente (somente GUI) usando C # e o componente que irá calcular as variáveis ??finais (chamados: calculadora variáveis) usando C ++. o objectivo de desenvolver "calculadora variáveis" em c ++ é para modularidade. por exemplo, se eu encontrei as variáveis ??cálculos levará mais tempo no lado do cliente posso usar o mesmo módulo no lado do servidor.

Também vou desenvolver o lado do servidor usando o padrão C ++.

Notas: O servidor deve processar conjunto de mensagens e enviá-lo para o cliente em menos de um segundo o número máximo de mensagens vêm no início do mercado de 100.000 mensagens

Todas as sugestões?

Foi útil?

Solução

O que é exatamente a restrição em tempo real que você tem que trabalhar com? Micro-segundos, mili-segundos, segundos?

Será que realmente precisa ser em tempo real, ou simplesmente de alta performance?

Assumindo que realmente precisa ser em tempo real, a linguagem é pouco provável que seja a coisa mais importante no sistema, e você é mais provável a ser condicionada pelo resto do ambiente de tempo de execução. Por exemplo: bibliotecas que você usa, pilhas de rede, protocolos de rede, sistema operacional, arquitetura de CPU, memória, cache etc

.

Tudo o que disse, C é provavelmente vai dar-lhe a melhor combinação de facilidade de uso e saber o que o sistema subjacente está fazendo. Se você conhece C ++ muito bem, então também seria adequado se usado com um padrão de codificação rigorosa. Se for extremamente alto desempenho, ou tem requisitos muito elevados previsibilidade então você pode precisar cair para código assembler, mas isso seria improvável, e as chances são o compilador tem uma compreensão muito melhor do gasoduto CPU do que você faz, e seria impraticável para qualquer coisa mais de alguns milhares de linhas-de-código.

Se claro, se você só precisa de alguns relativamente rápido, então eu não fazer o tempo-ness real deve ser o seu principal consideração na escolha de idioma, e bastante disponibilidade de bibliotecas adequadas e ferramentas, experiência equipe de desenvolvimento, adequação ao aplicação, etc seria considerações mais importantes.

Outras dicas

Eu discordo sobre "tempo real" ser uma definição turva. Mais provavelmente, as pessoas simplesmente não entendem o que se entende. Real-Time refere-se ao tempo de resposta de um sistema ser o mesmo que o sistema do mundo real. Você pode realmente ter um sistema mais rápido do que em tempo real, causando problemas semelhantes a ter um sistema mais lento do que em tempo real.

Como tal, eu não acredito que você está pedindo para o uso da linguagem em referência a um pedido de "tempo real", tanto quanto para uma aplicação muito rápido.

Confira o linguagem tiroteio e ver o que faz o melhor sobre os tipos de testes que melhor aproximar o espaço de design; No entanto, a minha resposta intestino é usar C.

Tendo trabalhado para bancos de investimento por quase 30 anos. Eu tenho escrito muitas aplicações como este. A questão subjacente que você precisa para resolver, provavelmente, não é o desempenho em tempo real, mas sim latência e taxa de transferência.

Latência neste contexto é sobre a redução de atrasos na rede, ea opção de idioma não é muito relevante.

O throughput é de cerca de grande capacidade de processamento sustentado durante longos períodos de tempo, enquanto que o desempenho é sobre muito grande capacidade de processamento por curtos períodos de tempo. Embora opção de idioma neste contexto é mais importante do que com latência, geralmente não é tão crítica como se poderia pensar.

Dos dois, é normalmente melhor para projetar para a menor latência possível em primeiro lugar. Rendimento problemas podem ser resolvidos mais tarde no desenvolvimento de vários truques, mas se livrar de alta latência cozido em um projeto existente é muito mais difícil.

Assim, gostaria de ir com C # no cliente e no servidor, pelo menos para a prova-de-conceito. Não é necessário introduzir complexidade adicional (outro idioma) para resolver um problema que não é provável que seja importante.

Editar : Notei que você editou sua pergunta para dizer que as necessidades do servidor para processar até 100 mil mensagens em não mais do que 1 segundo. Duvido que você pode conseguir isso com o software, mas você pode ser capaz de usando uma combinação de software e hardware .

Se você realmente precisa deste nível de baixa latência (e eu nunca precisei em 30 anos no negócio), em seguida, novamente a opção de idioma não é quase tão importante quanto ter muito elevada largura de banda, juntamente com um super- otimizado e paralelizado algoritmo. Mas eu gostaria de primeira questionar a exigência de ver o que eles realmente querem dizer -. Aposto que não é o que eles disseram

A definição do que é uma aplicação "real-time" é muito turva estes dias. Suas restrições de tempo real pode ser microssegundos de meses, dependendo da aplicação, e sua escolha de linguagem, OS, e as ferramentas tudo vai depender dessas coisas.

Neste caso, eu não posso ver porque você não deve usar C # no lado do servidor também. Talvez existam restrições que você não tenha mencionado, mas pelo que você disse que eu não vejo nenhuma razão para introduzir uma segunda língua para o seu problema.

Estes dias, opção de idioma imo não tem tanta importância quanto o que ele para quando se trata de aplicações cliente / servidor que não exigem grandes quantidades de poder de processamento. Java, C #, C / C ++ irá realizar semelhante (Obviamente línguas nativas terá alguma vantagem), contanto que você sabe como construir bons arquiteturas. Gostaria de ter em consideração a facilidade de uso ea quantidade de bibliotecas úteis disponíveis para cada idioma para tomar minha decisão. Eu não sei o que seus cálculos exatamente exigir ou quais informações estoque em processamento, mas olhar para as bibliotecas e ferramentas de desenvolvimento de GUI e de lá ir ...

Scala, Erlang ou Java. Mas eu sugiro fortemente Scala para ele é bom Sintaxe e alta escalabilidade.

Eu tomaria um olhar para Erlang! Sua arquitetura parece ser um ajuste perfeito para aplicações como esta.

A resposta intestino de Dan está errado, olhando para o site que ele postou é claro como nowaday C ++ (implementação GNU / intel) implementação outperform C

Você pode olhar para Adaptive Communications Environment , que é um portátil estrutura de servidor para escrever servidores de alto desempenho em C ++. esta postagem Stackoverflow tem uma série de links que o descrevem e ventilador para vários recursos.

Se você quiser realmente baixa latência e alto rendimento que eu sugiro que você remova qualquer processamento de dados dentro do servidor (cálculos). Se você realmente quiser / precisar de fazer cálculos não no cliente gostaria de configurar outro servidor que fornece um fluxo de dados complementares de dados derivados. Ou seja, seus valores calculados com base no original de alimentação / raw.

Que tipos de cálculos que você está falando?

Como você está planejando para lidar com a taxa de transferência na rede e na pilha de rede? Você tem latência de ferramentas de medição / sniffers / cartão Endace?

Eu também implementaram esse sistema um, e eu acho que RoadWarrior realmente resume tudo muito bem.

Esta é uma área de aplicação fantástico para filas de mensagens, e se você aproveitar uma boa tecnologia subjacente MQ Eu acredito que você pode cumprir sua exigência de transferência em quase qualquer linguagem de programação, linguagens de nível interpretado ainda maiores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top