Sistemas de negociação de baixa latência de alto débito


A página não pode ser encontrada.
Por favor, tente o seguinte:
Verifique se o endereço do site exibido na barra de endereços do seu navegador está escrito e formatado corretamente. Se você chegou a esta página clicando em um link, entre em contato com o administrador do site para alertá-los de que o link está formatado incorretamente. Clique no botão Voltar para tentar outro link.
HTTP Error 404 - Arquivo ou diretório não encontrado.
Serviços de Informações da Internet (IIS)
Informações técnicas (para pessoal de suporte)
Acesse os Serviços de suporte técnico da Microsoft e execute uma pesquisa de título para as palavras HTTP e 404. Abra a Ajuda do IIS, acessível no Gerenciador do IIS (inetmgr) e procure tópicos intitulados Configuração do site, tarefas administrativas comuns e Sobre mensagens de erro personalizadas.

11 Práticas recomendadas para sistemas de baixa latência.
Foram 8 anos desde que o Google notou que um extra de 500ms de latência caiu o tráfego em 20% e a Amazon percebeu que 100ms de latência extra caíram as vendas em 1%. Desde então, os desenvolvedores estiveram correndo para o fundo da curva de latência, culminando em desenvolvedores de front-end espremendo todos os últimos milésimos de segundo de seu JavaScript, CSS e HTML. O que se segue é uma caminhada aleatória através de uma variedade de práticas recomendadas para ter em mente ao projetar sistemas de baixa latência. A maioria dessas sugestões são levadas ao extremo lógico, mas é claro que podem ser feitas compensações. (Obrigado a um usuário anônimo por fazer esta pergunta no Quora e me fazer colocar meus pensamentos por escrito).
Escolha o idioma certo.
As linguagens de script não precisam se aplicar. Embora eles continuem ficando cada vez mais rápidos, quando você está olhando para raspar os últimos milissegundos do seu tempo de processamento, você não pode ter a sobrecarga de um idioma interpretado. Além disso, você quer um modelo de memória forte para ativar a programação sem bloqueio para que você esteja olhando Java, Scala, C ++ 11 ou Go.
Mantenha tudo na memória.
I / O irá matar sua latência, portanto, certifique-se de que todos os seus dados estão na memória. Isso geralmente significa gerenciar suas próprias estruturas de dados em memória e manter um registro persistente, para que você possa reconstruir o estado após uma reinicialização de máquina ou processo. Algumas opções para um registro persistente incluem Bitcask, Krati, LevelDB e BDB-JE. Alternativamente, você pode fugir com a execução de um banco de dados local, persistente na memória, como redis ou MongoDB (com dados da memória & gt; & gt;). Observe que você pode perder alguns dados sobre falhas devido à sua sincronização de fundo no disco.
Mantenha dados e processamento colocados.
O lúpulo de rede é mais rápido do que o disco, mas mesmo assim eles vão adicionar muitas despesas gerais. Idealmente, seus dados devem caber inteiramente na memória em um host. Com a AWS fornecendo quase 1/4 TB de RAM na nuvem e servidores físicos que oferecem múltiplas TBs, isso geralmente é possível. Se você precisa executar em mais de um host, você deve garantir que seus dados e solicitações sejam adequadamente particionados para que todos os dados necessários para atender uma determinada solicitação estejam disponíveis localmente.
Mantenha o sistema subutilizado.
A baixa latência requer sempre recursos para processar a solicitação. Não tente executar no limite do que seu hardware / software pode fornecer. Sempre tem muita sala de cabeça para rajadas e depois algumas.
Mantenha os parâmetros de contexto ao mínimo.
Os switches de contexto são um sinal de que você está fazendo mais trabalho de computação do que você tem recursos. Você quer limitar seu número de segmentos ao número de núcleos em seu sistema e colocar cada segmento no seu núcleo.
Mantenha suas leituras seqüenciais.
Todas as formas de armazenamento, murchar é rotacional, com base em flash ou memória, melhoram significativamente quando usado sequencialmente. Ao emitir leituras seqüenciais para a memória, você desencadeia o uso da pré-busca no nível de RAM, bem como no nível de cache da CPU. Se for feito corretamente, a próxima peça de dados que você precisa estará sempre em cache L1 antes de precisar. A maneira mais fácil de ajudar esse processo é fazer uso intenso de matrizes de tipos ou tipos de dados primitivos. Os ponteiros a seguir, seja através do uso de listas vinculadas ou através de matrizes de objetos, devem ser evitados a todo custo.
Lote suas escritas.
Isso parece contraintuitivo, mas você pode obter melhorias significativas no desempenho através de gravações por lotes. No entanto, existe um equívoco de que isso significa que o sistema deve aguardar uma quantidade arbitrária de tempo antes de escrever. Em vez disso, um segmento deve girar em um loop apertado fazendo I / O. Cada escrita irá lote todos os dados que chegaram desde a última gravação emitida. Isso faz com que um sistema muito rápido e adaptável.
Respeite seu cache.
Com todas essas otimizações no local, o acesso à memória rapidamente se torna um gargalo. Fixar threads para seus próprios núcleos ajuda a reduzir a poluição do cache da CPU e as E / S seqüenciais também ajudam a pré-carregar o cache. Além disso, você deve manter os tamanhos de memória para baixo usando tipos de dados primitivos para que mais dados se encaixem no cache. Além disso, você pode procurar algoritmos cache-inconscientes que funcionam recursivamente, quebrando os dados até que ele se encaixe no cache e depois faça qualquer processamento necessário.
Não bloqueando o máximo possível.
Faça com que os amigos não bloqueiem e aguardem estruturas e algoritmos de dados gratuitos. Toda vez que você usa um bloqueio, você precisa baixar a pilha para o sistema operacional para mediar o bloqueio, que é uma enorme sobrecarga. Muitas vezes, se você sabe o que está fazendo, você pode contornar os bloqueios através da compreensão do modelo de memória da JVM, C ++ 11 ou Go.
Async, tanto quanto possível.
Qualquer processamento e particularmente qualquer E / S que não seja absolutamente necessário para a construção da resposta deve ser feito fora do caminho crítico.
Paralelize o máximo possível.
Qualquer processamento e particularmente qualquer E / S que possa acontecer em paralelo deve ser feito em paralelo. Por exemplo, se sua estratégia de alta disponibilidade inclui o log de transações para o disco e o envio de transações para um servidor secundário, essas ações podem acontecer em paralelo.
Quase tudo isso vem de seguir o que o LMAX está fazendo com seu projeto Disruptor. Leia sobre isso e siga tudo o que Martin Thompson faz.
Compartilhar isso:
Relacionados.
Publicado por.
Benjamin Darfler.
29 pensamentos sobre & ldquo; 11 melhores práticas para sistemas de baixa latência & rdquo;
E feliz em estar na sua lista 🙂
Bom artigo. One beef: Go doesn & # 8217; t tem um modelo de memória sofisticado como Java ou C ++ 11. Se o seu sistema se encaixa com a rotina da rotina e a arquitetura dos canais, é bom demais, sem sorte. O AFAIK não é possível excluir o agendador de tempo de execução, portanto, não há falhas de sistema operacional nativas e a capacidade de criar suas próprias estruturas de dados livres de bloqueio como (colunas SPSC / anejadores) também faltam severamente.
Obrigado pela resposta. Embora o modelo de memória Go (golang / ref / mem) possa não ser tão robusto quanto o Java ou o C ++ 11, tive a impressão de que você ainda poderia criar estruturas de dados sem bloqueio usando isso. Por exemplo, github / textnode / gringo, github / scryner / lfreequeue e github / mocchira / golfhash. Talvez eu estivesse faltando alguma coisa? É certo que eu sei muito menos sobre o Go do que a JVM.
Benjamin, o modelo de memória Go detalhado aqui: golang / ref / mem é principalmente em termos de canais e mutexes. Eu olhei através dos pacotes que você listou e enquanto as estruturas de dados existem & # 8220; lock free & # 8221; eles não são equivalentes ao que um pode construir em Java / C ++ 11. O pacote de sincronização a partir de agora, não tem suporte para átomos relaxados ou a semântica de aquisição / lançamento do C ++ 11. Sem esse suporte, é difícil construir estruturas de dados SPSC tão eficientes quanto as possíveis em C ++ / Java. Os projetos que você liga usam atomic. Add & # 8230; que é um átomo consistente consecutivamente. Ele é construído com XADD como deveria ser # 8211; github / tonnerre / golang / blob / master / src / pkg / sync / atomic / asm_amd64.s.
Eu não estou tentando derrubar Ir para baixo. É preciso um esforço mínimo para escrever IO assíncrono e concorrente.
código suficientemente rápido para a maioria das pessoas. A biblioteca std também está altamente ajustada para o desempenho. A Golang também tem suporte para estruturas que estão faltando em Java. Mas, como está, penso que o modelo de memória simplista e o tempo de execução da rotina estão no caminho da construção do tipo de sistemas de que você está falando.
Obrigado pela resposta em profundidade. Espero que as pessoas achem isso útil.
Enquanto um & # 8216; native & # 8217; O idioma provavelmente é melhor, não é estritamente necessário. O Facebook nos mostrou que pode ser feito em PHP. Concedido eles usam o PHP pré-compilado com sua máquina HHVM. Mas é possível!
Infelizmente, o PHP ainda não possui um modelo de memória aceitável, mesmo que o HHVM melhore significativamente a velocidade de execução.
Enquanto eu lutarei para usar linguagens de nível superior, tanto quanto o próximo cara, acho que a única maneira de alcançar os aplicativos de baixa latência que as pessoas estão procurando é deslizar para um idioma como C. Parece que a mais difícil é escrever em um idioma, mais rápido ele executa.
Eu recomendo que você olhe para o trabalho que está sendo feito nos projetos e blogs aos quais eu liguei. A JVM está rapidamente se tornando o ponto quente para esses tipos de sistemas porque fornece um modelo de memória forte e uma coleta de lixo que permitem a programação sem bloqueio quase impossivel com um modelo de memória fraco ou indefinido e contadores de referência para gerenciamento de memória.
Olharei, Benjamin. Obrigado por apontá-los.
A coleta de lixo para programação sem bloqueio é um pouco de um deus ex machina. As filas MPMC e SPSC podem ser criadas sem necessidade de GC. Há também muitas maneiras de fazer programação sem bloqueio sem coleta de lixo e a contagem de referências não é a única maneira. Os ponteiros de perigo, RCU, Proxy-Collectors, etc, fornecem suporte para recuperação diferida e geralmente são codificados em suporte de um algoritmo (não genérico), portanto, eles geralmente são muito mais fáceis de construir. É claro que o trade-off reside no fato de que os GCs de qualidade de produção têm muito trabalho colocado neles e ajudarão o programador menos experiente a escrever algoritmos sem bloqueio (eles deveriam estar fazendo isso?) Sem codificação de esquemas de recuperação diferida . Alguns links sobre o trabalho realizado neste campo: cs. toronto. edu/
Sim C / C ++ recentemente ganhou um modelo de memória, mas isso não significa que eles eram completamente inadequados para o código sem bloqueio anteriormente. O GCC e outros compiladores de alta qualidade tinham diretrizes específicas do compilador para fazer programação gratuita de bloqueio em plataformas suportadas por um tempo realmente grande # 8211; não era padronizado na língua. Linux e outras plataformas forneceram essas primitivas por algum tempo também. A posição única de Java foi que forneceu um modelo de memória formalizado que garantiu trabalhar em todas as plataformas suportadas. Embora, em princípio, isso seja incrível, a maioria dos desenvolvedores do lado do servidor trabalham em uma plataforma (Linux / Windows). Eles já tinham as ferramentas para criar código sem bloqueio para sua plataforma.
GC é uma ótima ferramenta, mas não é necessária. Tem um custo tanto em termos de desempenho como em complexidade (todos os truques necessários para evitar STW GC). C ++ 11 / C11 já possui suporte para modelos de memória adequados. Não vamos esquecer que as JVMs não têm responsabilidade em suportar a API insegura no futuro. O código inseguro é & # 8220; unsafe & # 8221; então você perde os benefícios das características de segurança da Java. Finalmente, o código inseguro usado para criar memória e simular estruturas em Java parece muito mais feio do que as estruturas C / C ++ onde o compilador está fazendo isso funciona de maneira confiável. C e C ++ também fornecem acesso a todas as ferramentas elétricas específicas de plataforma de baixo nível, como PAUSE ins, SSE / AVX / NEON etc. Você pode até ajustar seu layout de código através de scripts de linker! O poder fornecido pela cadeia de ferramentas C / C ++ é realmente incomparável pela JVM. O Java é uma ótima plataforma, no entanto, acho que a maior vantagem é que a lógica comercial comum (90% do seu código?) Ainda pode depender do GC e dos recursos de segurança e fazer uso de bibliotecas altamente sintonizadas e testadas escritas com inseguro. Este é um grande trade-off entre obter os últimos 5% de perf e ser produtivo. Um trade-off que faz sentido para muitas pessoas, mas um trade-off, no entanto. Escrever um código de aplicação complicado em C / C ++ é um pesadelo depois de tudo.
No dia 10 de março de 2014 às 12:52, CodeDependents escreveu:
& gt; Graham Swan comentou: "Tenho uma olhada, Benjamin. Obrigado por & gt; apontando para fora. & # 8221;
Falta o 12: Não use linguagens coletadas Garbadge. GC é um gargalo na piora. Provavelmente, interrompe todos os tópicos. É um global. Isso distrai o arquiteto para gerenciar um dos recursos mais craterais (CPU-near memory).
Na verdade, muito deste trabalho vem diretamente de Java. Para fazer uma programação livre de bloqueio, você precisa de um modelo de memória claro, que c ++ recentemente ganhou recentemente. Se você sabe trabalhar com GC e não contra isso, você pode criar sistemas de baixa latência com muita facilidade.
Eu tenho que concordar com Ben aqui. Houve muitos progressos no paralelismo do GC na última década, ou seja, com o coletor G1 sendo o incantation mais recente. Pode levar um pouco de tempo para sintonizar o heap e vários botões para obter o GC para coletar com quase nenhuma pausa, mas isso contrasta em comparação com o tempo de desenvolvimento necessário para não ter GC.
Você pode até dar um passo adiante e criar sistemas que produzem tão pouco lixo que você pode facilmente empurrar o seu GC fora da sua janela de operação. É assim que todas as lojas comerciais de alta freqüência o fazem quando são executados na JVM.
A coleta de lixo para programação sem bloqueio é um pouco de um deus ex machina. As filas MPMC e SPSC podem ser criadas sem necessidade de GC. Há também muitas maneiras de fazer programação sem bloqueio sem coleta de lixo e a contagem de referências não é a única maneira. Os ponteiros de perigo, RCU, Proxy-Collectors, etc, fornecem suporte para recuperação diferida e são codificados em suporte de um algoritmo (não genérico), portanto, eles são muito mais fáceis de construir. É claro que o trade-off reside no fato de que os GCs de qualidade de produção têm muito trabalho colocado neles e ajudarão o programador menos experiente a escrever algoritmos sem bloqueio (eles deveriam estar fazendo isso?) Sem codificação de esquemas de recuperação diferida . Alguns links sobre o trabalho realizado neste campo: cs. toronto. edu/
Sim C / C ++ recentemente ganhou um modelo de memória, mas isso não significa que eles eram completamente inadequados para o código sem bloqueio anteriormente. O GCC e outros compiladores de alta qualidade tinham diretrizes específicas do compilador para fazer programação gratuita de bloqueio em plataformas suportadas por um tempo realmente grande # 8211; não era padronizado na língua. Linux e outras plataformas forneceram essas primitivas por algum tempo também. A posição única de Java foi que forneceu um modelo de memória formalizado que garantiu trabalhar em todas as plataformas suportadas. Embora, em princípio, isso seja incrível, a maioria dos desenvolvedores do lado do servidor trabalham em uma plataforma (Linux / Windows). Eles já tinham as ferramentas para criar código sem bloqueio para sua plataforma.
GC é uma ótima ferramenta, mas não é necessária. Tem um custo tanto em termos de desempenho quanto em complexidade (todos os truques necessários para atrasar e evitar STW GC). C ++ 11 / C11 já possui suporte para modelos de memória adequados. Não vamos esquecer que as JVMs não têm responsabilidade em suportar a API insegura no futuro. O código inseguro é & # 8220; unsafe & # 8221; então você perde os benefícios das características de segurança da Java. Finalmente, o código inseguro usado para criar memória e simular estruturas em Java parece muito mais feio do que as estruturas C / C ++ onde o compilador está fazendo isso funciona de maneira confiável. C e C ++ também fornecem acesso a todas as ferramentas elétricas específicas de plataforma de baixo nível, como PAUSE ins, SSE / AVX / NEON etc. Você pode até ajustar seu layout de código através de scripts de linker! O poder fornecido pela cadeia de ferramentas C / C ++ é realmente incomparável pela JVM. O Java é uma ótima plataforma, no entanto, acho que a maior vantagem é que a lógica comercial comum (90% do seu código?) Ainda pode depender do GC e dos recursos de segurança e fazer uso de bibliotecas altamente sintonizadas e testadas escritas com inseguro. Este é um grande trade-off entre obter os últimos 5% de perf e ser produtivo. Um trade-off que faz sentido para muitas pessoas, mas um trade-off, no entanto. Escrever um código de aplicação complicado em C / C ++ é um pesadelo depois de tudo.
& gt; Não use linguagens coletadas garbadge.
Ou, pelo menos, & # 8220; tradicional & # 8221; Lixo coletado línguas. Porque eles são diferentes & # 8211; enquanto Erlang também tem um colecionador, não criou gargalos porque não pára o mundo & # 8217; t & # 8220; pára o mundo & # 8221; como Java, enquanto colecionava lixo e # 8211; em vez disso, interrompe os microcréditos pequenos individuais & # 8220; & # 8221; em uma escala de microssegunda, portanto, não é visível no grande.
Reescreva isso para & # 8220; tradicional & # 8221; algoritmos [i] de coleta de lixo [/ i]. Na LMAX usamos o Azul Zing, e apenas usando uma JVM diferente com uma abordagem diferente para a coleta de lixo, vimos grandes melhorias no desempenho, porque os GCs maiores e menores são ordens de magnitude mais baratas.
Existem outros custos que compensam isso, é claro: você usa um monte muito mais, e o Zing não é barato.
Reblogged this em Java Prorgram Exemplos e comentou:
Um dos artigos de leitura obrigatória para programadores Java, é a lição que você aprenderá depois de passar um tempo considerável de afinação e desenvolver sistemas de baixa latência em Java em 10 minutos.
Revivendo um tópico antigo, mas (incrivelmente) isso deve ser apontado:
1) Linguagens de nível superior (por exemplo, Java) não desejam a funcionalidade do hardware que não está disponível para idiomas de nível inferior (por exemplo, C); declarar que assim e assim é completamente impossível & # 8221; em C, facilmente acessível em Java, é um lixo completo sem reconhecer que o Java é executado em hardware virtual onde a JVM deve sintetizar a funcionalidade exigida pelo Java, mas não fornecida pelo hardware físico. Se uma JVM (por exemplo, escrita em C) pode sintetizar a funcionalidade X, então também pode um programador C.
2) & # 8220; Lock free & # 8221; não é o que as pessoas pensam, exceto quase por coincidência em certas circunstâncias, como o único núcleo x86; multicore x86 não pode ser executado sem bloqueio sem barreiras de memória, que tem complexidades e custos semelhantes ao bloqueio regular. De acordo com 1 acima, se o Lock Free funcionar em um determinado ambiente, é porque ele é suportado pelo hardware, ou emulado / sintetizado por software em um ambiente virtual.
Great Points Julius. O ponto que eu estava tentando (talvez sem sucesso) é que é proibitivamente difícil aplicar muitos desses padrões em C, pois eles dependem do GC. Isso vai além do simples uso de barreiras de memória. Você também deve considerar a liberação de memória, o que fica particularmente difícil quando você está lidando com algoritmos livres de segurança e sem espera. É aqui que o GC adiciona uma grande vitória. Dito isto, eu ouço que Rust tenha algumas idéias muito interessantes sobre a propriedade da memória que possam começar a abordar algumas dessas questões.

US Search Desktop.
Agradecemos seus comentários sobre como melhorar a Pesquisa do Yahoo. Este fórum é para você fazer sugestões de produtos e fornecer feedback pensativo. Estamos sempre tentando melhorar nossos produtos e podemos usar o feedback mais popular para fazer uma mudança positiva!
Se você precisar de assistência de qualquer tipo, visite nosso fórum de suporte comunitário ou encontre ajuda própria em nosso site de ajuda. Este fórum não é monitorado quanto a problemas relacionados ao suporte.
O fórum de comentários do produto do Yahoo agora requer uma ID e senha de Yahoo válidas para participar.
Agora você precisa fazer o login usando sua conta de e-mail do Yahoo para nos fornecer feedback e enviar votos e comentários às ideias existentes. Se você não possui uma ID do Yahoo ou a senha para sua ID do Yahoo, inscreva-se para uma nova conta.
Se você tiver uma ID e senha de Yahoo válidas, siga estas etapas, se desejar remover suas postagens, comentários, votos e / ou perfil no fórum de comentários do produto do Yahoo.
Vote em uma ideia existente () ou publique uma nova ideia ...
Ideias quentes Principais ideias Novas ideias Categoria Estado Meus comentários.
Eu não gosto do novo e-mail. Quero voltar para o meu antigo correio. As instruções para ir às configurações e ir para a parte inferior da página não.
Volte para o e-mail antigo. As instruções para fazê-lo não funcionam.
quando é o prêmio de escolha adolescente.
Sou um adolescente notável que faz coisas excepcionais para ajudar seus próprios colegas.
Eu preciso entrar em um programa para biseux e lésbicas.
em um programa para lésbicas bisexuais.
em pothigai t. v. as taxas de vegitales vendidas no mercado o item de pudalangai é mostrado programe peergangai por alguns dias e para karunaik.
no podigai t. v no programa da manhã das taxas de mercado de vegetais, eles exibem o vegetal errado para pudalangai mostram peergangai e para karunaikilangu mostram senaikilangu. pelo que dá o número de telefone do nome dos formadores e o telefone celular pode ser mostrado no topo até que ele termine. Não há nenhum dano para você e útil para os antigos e aqueles que têm interesse podem contatá-los. Espero que você precise corrigir e exibir o número de telefone aqui depois. Você está aqui. T. SOMASUNDARAM, CÉLULA. 9444 925 933.
Melhorar a pesquisa.
Seus resultados de pesquisa para ROCK STAR CRYSTALS em Nova York não incluem nossas lojas como negócios relevantes ou relacionados para uma série de palavras-chave naturais em ponto para nossos negócios. Esta lista inclui Cristais NYC, Crystal Shops NYC, Rock Shops NYC, Mineral Stores NYC, Mineral Shops NYC, Mineral Specimens NYC, Fine Minerals NYC, Crystal Stores NYC, Geodes NYC, CrystaL GIFTS NYC, etc. Nosso site rockstarsrystalsmanhattan geralmente aparece em algum lugar, mas não mostramos na sua lista suspensa de lojas relevantes nesta área. Uma vez que somos uma das maiores e únicas lojas de rock e armazenistas de minerais em Nova York que comercializam exclusivamente cristais, minerais e espécimes minerais. Pensamos que melhoraria a satisfação dos clientes ao pesquisar a YAHOO fornecendo os resultados mais relevantes e efetivos. TENDÊNCIAS PARA A NOSSA AJUDA !
Seus resultados de pesquisa para ROCK STAR CRYSTALS em Nova York não incluem nossas lojas como negócios relevantes ou relacionados para uma série de palavras-chave naturais em ponto para nossos negócios. Esta lista inclui Cristais NYC, Crystal Shops NYC, Rock Shops NYC, Mineral Stores NYC, Mineral Shops NYC, Mineral Specimens NYC, Fine Minerals NYC, Crystal Stores NYC, Geodes NYC, CrystaL GIFTS NYC, etc. Nosso site rockstarsrystalsmanhattan geralmente aparece em algum lugar, mas não mostramos na sua lista suspensa de lojas relevantes nesta área. Uma vez que somos uma das maiores e únicas lojas de rock e armazenistas de minerais em ... mais.
Eu quero mudar o idioma em inglês.
Eu quero mudar o idioma em inglês, então me deixe saber como eu mudo o idioma em todo o email. Quando eu registrei meu e-mail na indonésia e não conheço a língua indonésia.
FAÇA COMPETIR-LHE UM PEQUENO EASER. EU PRECISO A SUA AJUDA E POSSO TENDER-LHE.
sem sugestões, eu aceito o que vier.
No Idea, Im neutra, boa sorte para todos na notícia.
Um resultado de insulto inapropriado foi mostrado por padrão.
Eu estava procurando uma definição de tuppence, a moeda britânica. Recebi um resultado que mencionava os soldados das mulheres. Eu não queria ver esses resultados - certamente não por padrão. Seria preferível, ao pesquisar definições e similares, que os resultados mais gerais (ou seja, não gíria, não slur, inofensivos) sejam mostrados por padrão, e outros apenas se assim desejarem pelo usuário.
Olá Yahoos, 1. Possuo um resumo técnico. 2. Quando eu faço uma pesquisa do Yahoo para o "currículo técnico" e o quot; sem o quot.
2. Quando eu faço uma pesquisa do Yahoo para "resumo de escritor técnico" sem as notas de cotação, há muitos retornos inapropriados, como exemplos, amostras, solicitações de currículos e modelos, etc. E meu site não pode ser encontrado mesmo quando eu definir o resulta em 100!
Dê-me outra oportunidade e eu as listarei para lembrar.
gostaria de votar mais tarde.
Tire seu motor de busca padrão ******** fora do meu site de e-mail.
Eu acho que o título é auto-explicativo.
A interface fede.
O tempo de resposta do Yahoo é terrível. Foi minha página inicial desde que a Internet foi inventada (dias do Netscape Navigator). Vocês têm que melhorar o tempo de resposta. Reduza os vídeos estúpidos e anúncios idiotas. Eu estou cansado disso.
Não vê a sua ideia? Publique uma nova ideia ...
US Search Desktop.
Publicar uma nova ideia ... Todas as ideias O meu feedback Eu tenho um problema 27 Eu tenho uma sugestão 21 Outros 6 O que eu não gosto 29 O que eu gosto 1.
Feedback e Base de Conhecimento.
Dê retorno.
Deutschland Finanzen Mobile DF iOS 1 idéia España Finanzas Mobile DF iOS 7 ideias Contas Painel 33 ideias Opinião do anúncio 3 ideias Respostas TH 31 ideias Respostas TH 0 idéias Respostas Fórum UV (versão de teste) 10 ideias Austrália Ideias de celebridades 0 Austrália Finanças Mobile Android 0 ideias Austrália Estilo 0 idéias Austrália Yahoo Tech 0 idéias Autos Impulso 2 idéias Aviate 1,506 idéias Canadá Finanças 1,099 ideias Canadá Finanças Mobile Android 0 ideias Canadá Finanças Mobile DF iOS 3 ideias Canadá Finanças Mobile iOS 465 ideias Canadá Página inicial 5,109 idéias Canadá Filmes 14 ideias Notícias do Canadá 873 ideias Canadá com segurança 10 idéias Canadá Tela 128 idéias Canadá Clima 94 ideias Canadá Yahoo Beleza 0 idéias Canadá Yahoo Celebrity 10 ideias Canadá Yahoo Finanças 0 ideias Canadá Yahoo Filmes 10 ideias Canadá Yahoo Notícias 0 idéias Canadá Yahoo Estilo 21 ideias Futebol universitário Pick & # 39; em 112 idéias TV conectada 361 idéias Corp Mail Test 1 1.313 idéias Corp Mail Testing 1.256 idéias Cricket 21 ideias Daily Fantasy 87 ideias Developer Netwo rk 1 ideia Double Down 86 ideias Fantasy Baseball 431 ideias Fantasy Basketball 392 ideias Fantasy Football 704 ideias Fantasy Hockey 341 ideias Fantasy Live Scoring em Matchup e Classificações 804 ideias Fantasy Sports Aplicações Android 1.366 ideias Fantasy Sports iOS Apps 2.112 idéias Finanças 1.174 ideias Finanças - CA 493 idéias Finanças - ideias US 9 Finanças Ideias ChartIQ 426 Finanças Mobile Web 403 idéias Finanças Portfolios 810 idéias Finanças Triagem de ações 35 idéias Finanças Tablet 44 idéias Flickr - Perfil 290 idéias Flickr Android 60 idéias Flickr para Apple TV 24 idéias Flickr Grupos 12 idéias Flickr Interno 0 ideias Flickr iOS Dogfooding 0 idéias Flickr iPad 138 idéias Flickr iPhone 324 ideias Flickr Nova foto Página 8,030 idéias Flickr Pesquisa 0 ideias Alimentação Revistas 0 idéias Jogos 3,147 idéias Mapas globais 1,021 ideias GS Mobile Web 42 ideias Health Pulse 3 ideias Home Page (Android) 1.689 ideias Home Page (iOS) 3.808 ideias Hong Kong Homepage 0 ideias Índia Celebridade 43 ideias Índia Finanças 493 ideias Índia Homepage 1.867 idéias Índia Estilo de vida 173 idéias Índia Filmes 84 idéias Índia Notícias 327 idéias Índia Parceiro Tata 0 idéias Índia Parceiro Portal Tikona 0 idéias Índia com segurança 15 idéias Índia Tela 165 idéias Índia Tempo 30 ideias Índia Yahoo Beleza 0 idéias Índia Yahoo Celebridade 4 idéias Índia Yahoo Finanças 0 ideias Índia Yahoo Filmes 16 idéias Índia Yahoo Notícias 0 ideias Índia Yahoo Estilo 14 ideias Indonésia Celebridade 38 ideias Indonésia Página inicial 1.155 idéias Indonésia Notícias 170 ideias Indonésia com segurança 29 ideias Indonésia Ela 34 ideias Irlanda Homepage 90 idéias Jordânia Maktoob Homepage 418 idéias Comentários sobre o anúncio de correio electrónico 10 ideias Maktoob الطقس مكتوب 5 ideias Maktoob Celebridade 1 ideia Maktoob Entretenimento 10 ideias Maktoob Estilo de vida 0 ideias Maktoob Filmes 2 ideias Maktoob Notícias 182 idéias Maktoob Tela 15 ideias Maktoob Id. de estilo 1 Maktoob ألعاب مكتوب 0 ideias Maktoob شاشة مكتوب 28 ideias Malásia Homepage 17 ideias Malásia Notícias 58 ideias Malásia com segurança 6 ideias Malásia Video 0 ideias Malásia Tempo 1 idéia Soluções do comerciante 1 ideia Meu Yahoo 31.890 ideias Meu Yahoo - backup 1 idéia Meu Yahoo - US 9.176 idéias Meu arquivo do Yahoo 314 idéias Novo email 9.383 idéias Novo email * 2.920 idéias Nova Zelândia Negócios & Finanças 132 idéias Nova Zelândia Página inicial 1.039 idéias Nova Zelândia com segurança 3 idéias Nova Zelândia Tela 0 idéias Notícias do PH ANC 21 ideias Filipinas Celebridade 214 ideias Filipinas Página inicial 8 ideias Filipinas Notícias 123 idéias Filipinas com segurança 12 idéias Filipinas Vídeo 0 idéias Filipinas Tempo 3 idéias Pick N Roll 19 ideias Postmaster 43 ideias Pro Football Pick & # 39; em 104 idéias Retail Pulse 0 idéias Rivals 11 idéias com segurança 165 idéias Tela para idéias iOS 0 Busca extensões 96 idéias Pesquisar Downloads de produto 88 idéias Segurança 497 ideias Experiência de login 79 idéias Singapura Entretenimento 20 idéias Cingapura Finanças 230 idéias Cingapura Página inicial 1.049 idéias Cingapura Notícias 212 idéias Cingapura com segurança 11 idéias Cingapura Tela 19 idéias Cingapura Tempo 4 idéias Cingapura Yahoo Beleza 0 idéias Cingapura Yahoo Ideias da celebridade 4 Cingapura Yahoo Finanças 0 idéias Cingapura Yahoo Filmes 0 idéias Cingapura Yahoo Notícias 0 idéias Singapore Yahoo Style 4 ideas Idéias da celebridade da África do Sul Ideia da África do Sul 374 idéia s África do Sul Notícias 23 ideias Esportes Android 1,533 ideias Esportes CA 34 ideias Esportes iOS 1,025 ideias Esportes Redessinação 3,184 ideias SportsReel 6 ideias StatTracker Beta 554 ideias Survival Futebol 81 ideias Taiwan Yahoo 名人 娛樂 0 ideias Taiwan Yahoo 運動 0 ideias Tailândia Safely 2 ideias Toolbar Mail App 216 ideas Toolbar Weather App 72 ideias Tourney Pick & # 39; em 41 ideias UK & amp; Irlanda Finanças 1.077 ideias UK & amp; Jogos da Irlanda 19 ideias UK & amp; Irlanda Homepage 436 ideias UK & amp; Irlanda Notícias 0 ideias UK & amp; Ireland News Balde interno 0 ideias UK & amp; Irlanda Notícias Lego 376 ideas UK & amp; Irlanda com segurança 38 ideias UK & amp; Irlanda TV 21 ideias UK & amp; Irlanda Vídeo 187 ideias UK & amp; Irlanda Tempo 99 ideias Reino Unido Respostas 1 ideia UK Daily Fantasy 0 ideias UK Finanças Mobile Android 12 idéias UK Finanças Mobile DF iOS 2 idéias UK Finanças Mobile iOS 308 idéias UK Yahoo Movies 23 ideias US Respostas 8,949 ideias US Respostas Mobile Web 2,154 ideias US Autos GS 442 ideias US Celebrity GS 660 ideias EUA Comentários 350 ideias US Finance Mobile Android 41 idéias US Finance Mobile iOS 550 idéias US Flickr 245 ideias Grupos dos EUA 4,129 ideias Página inicial dos EUA B1 68 ideias US Homepage B2 33 ideias US Homepage B3 50 ideias US Homepage B4 33 ideias Página inicial dos EUA B5 0 ideias Página inicial dos EUA M 7,021 ideias Página inicial dos EUA YDC 43 idéias US Homes GS 203 idéias US Live Web Insights 24 ideias US Mail 193 ideias US Mail 12,232 ideias EUA Mapas 3,491 ideias US Membership Desktop 7,955 ideias US Membership Mobile 91 ideias EUA Filmes GS 424 ideias US Music GS 195 ideias US News 6,003 ideias US Search App Android 2 ideias US Search App iOS 9 ideias US Search Chrome Extension 780 ideias US Chrome Chrome Extensão v2 2,197 ideias US Search Desktop 13 ideias US Search Desktop Bucket A 7 ideias US Search Desktop Bucket B 8 ideias US Pesquisar KG 14 ideias US Pesquisar Listagens locais 20,764 ideias EUA Busca Mobile Web 3 ideias EUA Busca Mozilla 1 ideia EUA Pesquisar estoque Quotes 11 ideias US Pesquisar Tablet Web 1 ideia US Shine Ideia GS 1 US Toolbar 5,549 ideias US Travel GS 207 idéias US TV GS 367 ideias US Weather 2,314 idéias US Weather Bucket 0 ideias US Weather Mobile 13 idéias US Weather Mobile Android 2 ideias Guia de vídeos Android 149 ideias Guia de vídeo iOS 205 ideias Teste de vídeo Testando 15 ideias Web Hosting 4 ideias Yahoo Acessibilidade 358 ideias Yahoo Autos 71 ideias Yahoo Beauty 100 ideias Yahoo Ideias de celebridades 0 Yahoo Celebrity Canada 0 ideias Yahoo Decor 0 ideias Yahoo Entertainment 355 ideias Yahoo Esports 50 ideias Yahoo Feedback 0 ideias Yahoo Finance Feedback Forum 1 ideia Yahoo Finanças IN Mobile Android 0 ideias Yahoo Finance SG Mobile Android 1 ideia Yahoo FinanceReel 4 ideias Yahoo Comida 118 idéias Yahoo Gemini 2 ideias Yahoo Health 90 ideias Yahoo ajuda 195 ideias Yahoo Home 211 ideias Yahoo Home * 28 ideias Yahoo Lifestyle 168 idéias Ideias do Yahoo Yahoo 0 Yahoo Mail 2,150 ideias Aplicação do Yahoo Mail para Android 399 ideias Yahoo Mail Basic 631 idéias Yahoo Mail iOS App 47 idéias Yahoo Mail Mobile Web 1 idéia Yahoo Makers 51 ideias Yahoo Messenger 83 idéias Yahoo Mobile Developer Suite 61 idéias Yahoo Mobile para telefone 15 idéias Yahoo Mobile para Tablet 0 idéias Yahoo Music 77 idéias Yahoo News Digest Android 870 idéias Yahoo Notícias Digest iPad 0 ideias Yahoo News Digest iPhone 1,531 idéias Yahoo Newsroom Aplicativo para Android 57 idéias Yahoo Newsroom iOS App 32 ideias Yahoo Parenting 63 ideias Yahoo Politics 118 idéias Yahoo Publishing 13 ideias Yahoo Real Estate 2 ideias Yahoo Tech 459 ideias Yahoo Travel 143 idéias Yahoo TV 102 ideias Yahoo Veja 208 ideias Yahoo Weather Android 2.138 idéias Yahoo Weather iOS 22.698 ideias Yahoo! 7 Food App (iOS) 0 ideias Yahoo! 7 Página inicial Archive 57 ideas Yahoo! 7 Notícias (iOS) 23 ideias Yahoo! 7 Tela 0 ideias Yahoo! 7 TV FANGO App (Android) 1 ideia Yahoo! 7 aplicação TV FANGO (iOS) 1 ideia Yahoo! 7 TV Guide App (Android) 0 ideias Yahoo! 7 Guia de TV Guia (iOS) 1.246 ideias Yahoo! 7 Aplicação TV Plus7 (iOS) 0 ideias Yahoo! Centro de Feedback do Teste de Conceito 174 idéias Yahoo! Idéia de Contributor Network 1 Yahoo! Transliteração 29 ideias YAHOO! 7 Finanças 551 idéias Yahoo! 7 Jogos 9 ideias Yahoo! 7 Safely 19 ideias Yahoo7 Finanças Mobile DF iOS 12 ideias Yahoo7 Finanças Mobile iOS 217 ideias Yahoo7 Homepage 2.544 ideias.
Sua senha foi alterada.
Fizemos alterações para aumentar nossa segurança e restabelecer sua senha.
Acabamos de enviar-lhe um e-mail para. Clique no link para criar uma senha, depois volte aqui e faça o login.

Arquiteturas eficientes para sistemas de baixa latência e alta taxa de transferência na JVM.
Interesses relacionados.
Classificação e Estatísticas.
Opções de compartilhamento.
Ações de documentos.
As páginas 2 a 15 não são mostradas nesta pré-visualização.
Documentos recomendados.
Documentos semelhantes às arquiteturas eficientes para sistemas de baixa latência e alta taxa de transferência na JVM.
Documentos Sobre Fio (Informática)
Documentos sobre computação paralela.
Menu de Rodapé.
Legal.
Mídia social.
Direitos autorais e cópia; 2018 Scribd Inc. Procure livros. Site móvel. Diretório do site. Idioma do site:
Você tem certeza?
Esta ação pode não ser possível desfazer. Você tem certeza que quer continuar?
Tem certeza de que deseja excluir esta lista?
Tudo o que você selecionou também será removido de suas listas.
Este livro também será removido de todas as suas listas.
Nós temos títulos com curadoria que achamos que você adorará.
O resto deste título estará disponível em breve.
Arquiteturas eficientes para sistemas de baixa latência e alta taxa de transferência na JVM estarão disponíveis.

Sistemas de negociação de baixa latência de alta conversão
As Tecnologias de Classe de Ativos fornecem os serviços de tecnologia de negociação de ações mais confiáveis ​​e rentáveis ​​para suportar as necessidades atuais e futuras dos clientes institucionais. Nosso trabalho abrange todas as facetas da tecnologia, desde o desenvolvimento de software até o suporte empresarial.
Quem nós somos.
As Tecnologias de Classe de Ativos fornecem os serviços de tecnologia de negociação de ações mais confiáveis ​​e rentáveis ​​para suportar as necessidades comerciais atuais e futuras dos clientes institucionais.
A partir de sua posição altamente conceituada em várias indústrias, a Asset Class está expandindo sua base de clientes dentro do distrito financeiro. Agora somos conhecidos como um dos principais fornecedores de recursos tecnológicos para fundos mútuos.
A classe de ativos é uma empresa de suporte de produção de desenvolvimento de software e de negociação de ações que oferece serviços de tecnologia para pregões em bancos de investimento. Nossos serviços incluem desenvolvimento de aplicativos ...
Na Asset Class, não contratamos pessoas talentosas - as desenvolvemos. Vamos dar-lhe a oportunidade de aprimorar suas habilidades técnicas e gerenciais através da disponibilidade de várias ofertas de treinamento.

11 Práticas recomendadas para sistemas de baixa latência.
Foram 8 anos desde que o Google notou que um extra de 500ms de latência caiu o tráfego em 20% e a Amazon percebeu que 100ms de latência extra caíram as vendas em 1%. Desde então, os desenvolvedores estiveram correndo para o fundo da curva de latência, culminando em desenvolvedores de front-end espremendo todos os últimos milésimos de segundo de seu JavaScript, CSS e HTML. O que se segue é uma caminhada aleatória através de uma variedade de práticas recomendadas para ter em mente ao projetar sistemas de baixa latência. A maioria dessas sugestões são levadas ao extremo lógico, mas é claro que podem ser feitas compensações. (Obrigado a um usuário anônimo por fazer esta pergunta no Quora e me fazer colocar meus pensamentos por escrito).
Escolha o idioma certo.
As linguagens de script não precisam se aplicar. Embora eles continuem ficando cada vez mais rápidos, quando você está olhando para raspar os últimos milissegundos do seu tempo de processamento, você não pode ter a sobrecarga de um idioma interpretado. Além disso, você quer um modelo de memória forte para ativar a programação sem bloqueio para que você esteja olhando Java, Scala, C ++ 11 ou Go.
Mantenha tudo na memória.
I / O irá matar sua latência, portanto, certifique-se de que todos os seus dados estão na memória. Isso geralmente significa gerenciar suas próprias estruturas de dados em memória e manter um registro persistente, para que você possa reconstruir o estado após uma reinicialização de máquina ou processo. Algumas opções para um registro persistente incluem Bitcask, Krati, LevelDB e BDB-JE. Alternativamente, você pode fugir com a execução de um banco de dados local, persistente na memória, como redis ou MongoDB (com dados da memória & gt; & gt;). Observe que você pode perder alguns dados sobre falhas devido à sua sincronização de fundo no disco.
Mantenha dados e processamento colocados.
O lúpulo de rede é mais rápido do que o disco, mas mesmo assim eles vão adicionar muitas despesas gerais. Idealmente, seus dados devem caber inteiramente na memória em um host. Com a AWS fornecendo quase 1/4 TB de RAM na nuvem e servidores físicos que oferecem múltiplas TBs, isso geralmente é possível. Se você precisa executar em mais de um host, você deve garantir que seus dados e solicitações sejam adequadamente particionados para que todos os dados necessários para atender uma determinada solicitação estejam disponíveis localmente.
Mantenha o sistema subutilizado.
A baixa latência requer sempre recursos para processar a solicitação. Não tente executar no limite do que seu hardware / software pode fornecer. Sempre tem muita sala de cabeça para rajadas e depois algumas.
Mantenha os parâmetros de contexto ao mínimo.
Os switches de contexto são um sinal de que você está fazendo mais trabalho de computação do que você tem recursos. Você quer limitar seu número de segmentos ao número de núcleos em seu sistema e colocar cada segmento no seu núcleo.
Mantenha suas leituras seqüenciais.
Todas as formas de armazenamento, murchar é rotacional, com base em flash ou memória, melhoram significativamente quando usado sequencialmente. Ao emitir leituras seqüenciais para a memória, você desencadeia o uso da pré-busca no nível de RAM, bem como no nível de cache da CPU. Se for feito corretamente, a próxima peça de dados que você precisa estará sempre em cache L1 antes de precisar. A maneira mais fácil de ajudar esse processo é fazer uso intenso de matrizes de tipos ou tipos de dados primitivos. Os ponteiros a seguir, seja através do uso de listas vinculadas ou através de matrizes de objetos, devem ser evitados a todo custo.
Lote suas escritas.
Isso parece contraintuitivo, mas você pode obter melhorias significativas no desempenho através de gravações por lotes. No entanto, existe um equívoco de que isso significa que o sistema deve aguardar uma quantidade arbitrária de tempo antes de escrever. Em vez disso, um segmento deve girar em um loop apertado fazendo I / O. Cada escrita irá lote todos os dados que chegaram desde a última gravação emitida. Isso faz com que um sistema muito rápido e adaptável.
Respeite seu cache.
Com todas essas otimizações no local, o acesso à memória rapidamente se torna um gargalo. Fixar threads para seus próprios núcleos ajuda a reduzir a poluição do cache da CPU e as E / S seqüenciais também ajudam a pré-carregar o cache. Além disso, você deve manter os tamanhos de memória para baixo usando tipos de dados primitivos para que mais dados se encaixem no cache. Além disso, você pode procurar algoritmos cache-inconscientes que funcionam recursivamente, quebrando os dados até que ele se encaixe no cache e depois faça qualquer processamento necessário.
Não bloqueando o máximo possível.
Faça com que os amigos não bloqueiem e aguardem estruturas e algoritmos de dados gratuitos. Toda vez que você usa um bloqueio, você precisa baixar a pilha para o sistema operacional para mediar o bloqueio, que é uma enorme sobrecarga. Muitas vezes, se você sabe o que está fazendo, você pode contornar os bloqueios através da compreensão do modelo de memória da JVM, C ++ 11 ou Go.
Async, tanto quanto possível.
Qualquer processamento e particularmente qualquer E / S que não seja absolutamente necessário para a construção da resposta deve ser feito fora do caminho crítico.
Paralelize o máximo possível.
Qualquer processamento e particularmente qualquer E / S que possa acontecer em paralelo deve ser feito em paralelo. Por exemplo, se sua estratégia de alta disponibilidade inclui o log de transações para o disco e o envio de transações para um servidor secundário, essas ações podem acontecer em paralelo.
Quase tudo isso vem de seguir o que o LMAX está fazendo com seu projeto Disruptor. Leia sobre isso e siga tudo o que Martin Thompson faz.
Compartilhar isso:
Relacionados.
Publicado por.
Benjamin Darfler.
29 pensamentos sobre & ldquo; 11 melhores práticas para sistemas de baixa latência & rdquo;
E feliz em estar na sua lista 🙂
Bom artigo. One beef: Go doesn & # 8217; t tem um modelo de memória sofisticado como Java ou C ++ 11. Se o seu sistema se encaixa com a rotina da rotina e a arquitetura dos canais, é bom demais, sem sorte. O AFAIK não é possível excluir o agendador de tempo de execução, portanto, não há falhas de sistema operacional nativas e a capacidade de criar suas próprias estruturas de dados livres de bloqueio como (colunas SPSC / anejadores) também faltam severamente.
Obrigado pela resposta. Embora o modelo de memória Go (golang / ref / mem) possa não ser tão robusto quanto o Java ou o C ++ 11, tive a impressão de que você ainda poderia criar estruturas de dados sem bloqueio usando isso. Por exemplo, github / textnode / gringo, github / scryner / lfreequeue e github / mocchira / golfhash. Talvez eu estivesse faltando alguma coisa? É certo que eu sei muito menos sobre o Go do que a JVM.
Benjamin, o modelo de memória Go detalhado aqui: golang / ref / mem é principalmente em termos de canais e mutexes. Eu olhei através dos pacotes que você listou e enquanto as estruturas de dados existem & # 8220; lock free & # 8221; eles não são equivalentes ao que um pode construir em Java / C ++ 11. O pacote de sincronização a partir de agora, não tem suporte para átomos relaxados ou a semântica de aquisição / lançamento do C ++ 11. Sem esse suporte, é difícil construir estruturas de dados SPSC tão eficientes quanto as possíveis em C ++ / Java. Os projetos que você liga usam atomic. Add & # 8230; que é um átomo consistente consecutivamente. Ele é construído com XADD como deveria ser # 8211; github / tonnerre / golang / blob / master / src / pkg / sync / atomic / asm_amd64.s.
Eu não estou tentando derrubar Ir para baixo. É preciso um esforço mínimo para escrever IO assíncrono e concorrente.
código suficientemente rápido para a maioria das pessoas. A biblioteca std também está altamente ajustada para o desempenho. A Golang também tem suporte para estruturas que estão faltando em Java. Mas, como está, penso que o modelo de memória simplista e o tempo de execução da rotina estão no caminho da construção do tipo de sistemas de que você está falando.
Obrigado pela resposta em profundidade. Espero que as pessoas achem isso útil.
Enquanto um & # 8216; native & # 8217; O idioma provavelmente é melhor, não é estritamente necessário. O Facebook nos mostrou que pode ser feito em PHP. Concedido eles usam o PHP pré-compilado com sua máquina HHVM. Mas é possível!
Infelizmente, o PHP ainda não possui um modelo de memória aceitável, mesmo que o HHVM melhore significativamente a velocidade de execução.
Enquanto eu lutarei para usar linguagens de nível superior, tanto quanto o próximo cara, acho que a única maneira de alcançar os aplicativos de baixa latência que as pessoas estão procurando é deslizar para um idioma como C. Parece que a mais difícil é escrever em um idioma, mais rápido ele executa.
Eu recomendo que você olhe para o trabalho que está sendo feito nos projetos e blogs aos quais eu liguei. A JVM está rapidamente se tornando o ponto quente para esses tipos de sistemas porque fornece um modelo de memória forte e uma coleta de lixo que permitem a programação sem bloqueio quase impossivel com um modelo de memória fraco ou indefinido e contadores de referência para gerenciamento de memória.
Olharei, Benjamin. Obrigado por apontá-los.
A coleta de lixo para programação sem bloqueio é um pouco de um deus ex machina. As filas MPMC e SPSC podem ser criadas sem necessidade de GC. Há também muitas maneiras de fazer programação sem bloqueio sem coleta de lixo e a contagem de referências não é a única maneira. Os ponteiros de perigo, RCU, Proxy-Collectors, etc, fornecem suporte para recuperação diferida e geralmente são codificados em suporte de um algoritmo (não genérico), portanto, eles geralmente são muito mais fáceis de construir. É claro que o trade-off reside no fato de que os GCs de qualidade de produção têm muito trabalho colocado neles e ajudarão o programador menos experiente a escrever algoritmos sem bloqueio (eles deveriam estar fazendo isso?) Sem codificação de esquemas de recuperação diferida . Alguns links sobre o trabalho realizado neste campo: cs. toronto. edu/
Sim C / C ++ recentemente ganhou um modelo de memória, mas isso não significa que eles eram completamente inadequados para o código sem bloqueio anteriormente. O GCC e outros compiladores de alta qualidade tinham diretrizes específicas do compilador para fazer programação gratuita de bloqueio em plataformas suportadas por um tempo realmente grande # 8211; não era padronizado na língua. Linux e outras plataformas forneceram essas primitivas por algum tempo também. A posição única de Java foi que forneceu um modelo de memória formalizado que garantiu trabalhar em todas as plataformas suportadas. Embora, em princípio, isso seja incrível, a maioria dos desenvolvedores do lado do servidor trabalham em uma plataforma (Linux / Windows). Eles já tinham as ferramentas para criar código sem bloqueio para sua plataforma.
GC é uma ótima ferramenta, mas não é necessária. Tem um custo tanto em termos de desempenho como em complexidade (todos os truques necessários para evitar STW GC). C ++ 11 / C11 já possui suporte para modelos de memória adequados. Não vamos esquecer que as JVMs não têm responsabilidade em suportar a API insegura no futuro. O código inseguro é & # 8220; unsafe & # 8221; então você perde os benefícios das características de segurança da Java. Finalmente, o código inseguro usado para criar memória e simular estruturas em Java parece muito mais feio do que as estruturas C / C ++ onde o compilador está fazendo isso funciona de maneira confiável. C e C ++ também fornecem acesso a todas as ferramentas elétricas específicas de plataforma de baixo nível, como PAUSE ins, SSE / AVX / NEON etc. Você pode até ajustar seu layout de código através de scripts de linker! O poder fornecido pela cadeia de ferramentas C / C ++ é realmente incomparável pela JVM. O Java é uma ótima plataforma, no entanto, acho que a maior vantagem é que a lógica comercial comum (90% do seu código?) Ainda pode depender do GC e dos recursos de segurança e fazer uso de bibliotecas altamente sintonizadas e testadas escritas com inseguro. Este é um grande trade-off entre obter os últimos 5% de perf e ser produtivo. Um trade-off que faz sentido para muitas pessoas, mas um trade-off, no entanto. Escrever um código de aplicação complicado em C / C ++ é um pesadelo depois de tudo.
No dia 10 de março de 2014 às 12:52, CodeDependents escreveu:
& gt; Graham Swan comentou: "Tenho uma olhada, Benjamin. Obrigado por & gt; apontando para fora. & # 8221;
Falta o 12: Não use linguagens coletadas Garbadge. GC é um gargalo na piora. Provavelmente, interrompe todos os tópicos. É um global. Isso distrai o arquiteto para gerenciar um dos recursos mais craterais (CPU-near memory).
Na verdade, muito deste trabalho vem diretamente de Java. Para fazer uma programação livre de bloqueio, você precisa de um modelo de memória claro, que c ++ recentemente ganhou recentemente. If you know how to work with GC and not against it you can create low latency systems often with much more ease.
I have to agree with Ben here. There has been a lot of progress in GC parallelism in the last decade or so with the G1 collector being the latest incantation. It may take a little time to tune the heap and various knobs to get the GC to collect with almost no pause, but this pales in comparison to the developer time it takes to not have GC.
You can even go one step further and create systems that produce so little garbage that you can easily push your GC outside of your operating window. This is how all of the high frequency trading shops do it when running on the JVM.
Garbage collection for lock free programming is a bit of a deus ex machina. MPMC and SPSC queues can both be built without needing GC. There are also plenty of ways to do lock free programming without garbage collection and reference counting is not the only way. Hazard pointers, RCU, Proxy-Collectors etc all provide support for deferred reclamation and are coded in support of an algorithm (not generic), hence they are much easier to build. Of course the trade-off lies in the fact that production quality GCs have a lot of work put into them and will help the less experienced programmer write lock-free algorithms (should they be doing this at all?) without coding up deferred reclamation schemes. Some links on work done in this field: cs. toronto. edu/
Yes C/C++ just recently gained a memory model, but that doesn’t mean that they were completely unsuitable for lock-free code earlier. GCC and other high quality compilers had compiler specific directives to do lock free programming on supported platforms for a really long time – it was just not standardized in the language. Linux and other platforms have provided these primitives for some time too. Java’s unique position WAS that it provided a formalized memory model that it guaranteed to work on all supported platforms. Though in principle this is awesome, most server side developers work on one platform (Linux/Windows). They already had the tools to build lock free code for their platform.
GC is a great tool but not a necessary one. It has a cost both in terms of performance and in complexity (all the tricks needed to delay and avoid STW GC). C++11/C11 already have support for proper memory models. Let’s not forget that JVMs have no responsibility to support the Unsafe API in the future. Unsafe code is “unsafe” so you lose the benefits of Java’s safety features. Finally IMO the Unsafe code used to layout memory and simulate structs in Java looks a lot uglier than C/C++ structs where the compiler is doing that work for you in a reliable manner. C and C++ also provide access to all the low level platform specific power tools like the PAUSE ins, SSE/AVX/NEON etc. You can even tune your code layout through linker scripts! The power provided by the C/C++ tool chain is really unmatched by the JVM. Java is a great platform none the less, but I think it’s biggest advantage is that ordinary business logic (90% of your code?) can still depend on GC and safety features and make use of highly tuned and tested libraries written with Unsafe. This is a great trade-off between getting the last 5% of perf and being productive. A trade-off that makes sense for a lot of people but a trade-off none the less. Writing complicated application code in C/C++ is a nightmare after all.
& gt; Do not use garbadge collected languages.
Or, at least, “traditional” garbage collected languages. Because they are different – while Erlang too has a collector, it doesn’t creates bottlenecks because it doesn’t “stops the world” as Java while collecting garbage – instead it halts individual small “micro-threads” on a microsecond scale, so it’s not noticeable on the large.
Rewrite that to “traditional” garbage collection [i]algorithms[/i]. At LMAX we use Azul Zing, and just by using a different JVM with a different approach to garbage collection, we’ve seen huge improvements in performance, because both major and minor GCs are orders of magnitude cheaper.
There are other costs which offset that, of course: you use a hell of a lot more heap, and Zing isn’t cheap.
Reblogged this on Java Prorgram Examples and commented:
One of the must read article for Java programmers, it’s the lesson you will learn after spending considerable time tuning and developing low latency systems in Java in 10 minutes.
Reviving an old thread, but (amazingly) this has to be pointed out:
1) Higher level languages (eg Java) don’t elicit functionality from the hardware that isn’t available to lower level languages (eg C); to state that so-and-so is “completely impossible” in C while readily doable in Java is complete rubbish without acknowledging that Java runs on virtual hardware where the JVM has to synthesize functionality required by Java but not provided by the physical hardware. If a JVM (eg written in C) can synthesize functionality X, then so can a C programmer.
2) “Lock free” isn’t what people think it is, except almost by coincidence in certain circumstances, such as single core x86; multicore x86 cannot run lock free without memory barriers, which have complexities and cost similar to regular locking. As per 1 above, if lock free works in a given environment, it is because it is supported by hardware, or emulated/synthesised by software in a virtual environment.
Great Points Julius. The point I was trying (maybe unsuccessfully so) is that it’s prohibitively difficult to apply many of these patterns in C since they rely on GC. It goes beyond simply using memory barriers. You have to consider freeing memory as well which gets particularly difficult when you are dealing with lock free and wait free algorithms. This is where GC adds a huge win. That said, I hear Rust has some very interesting ideas around memory ownership that might begin to address some of these issues.

Comments