Friday, 2 March 2018

Sistemas de negociação de baixa latência


Você melhor conhece sua terminologia de negociação de alta freqüência.
O aumento do interesse dos investidores na negociação de alta freqüência (HFT) é importante para os profissionais da indústria atuarem com a terminologia HFT. Uma série de termos HFT têm suas origens na rede de computadores / indústria de sistemas, o que é de se esperar, uma vez que a HFT é baseada em arquitetura de computador incrivelmente rápida e software de última geração. Nós discutimos brevemente abaixo de 10 termos principais de HFT que acreditamos serem essenciais para obter uma compreensão do assunto.
Colocação.
Localizando computadores pertencentes a empresas HFT e comerciantes proprietários nas mesmas instalações onde os servidores de um computador da troca estão alojados. Isso permite que as empresas HFT acessem os preços das ações uma fração de segundo antes do resto do público investidor. A co-localização tornou-se um negócio lucrativo para as trocas, que cobram às empresas HFT milhões de dólares pelo privilégio de "acesso de baixa latência".
Como Michael Lewis explica em seu livro "Flash Boys", a enorme demanda de co-localização é uma das principais razões pelas quais algumas bolsas de valores expandiram substancialmente seus centros de dados. Enquanto o antigo prédio da Bolsa de Valores de Nova York ocupava 46 mil pés quadrados, o centro de dados NYSE Euronext em Mahwah, Nova Jersey, é quase nove vezes maior, com 398 000 pés quadrados.
Flash Trading.
Um tipo de negociação de HFT em que uma troca irá "piscar" informações sobre compra e venda de pedidos de participantes do mercado para empresas HFT por algumas frações de segundo antes de a informação ser disponibilizada ao público. O comércio instantâneo é controverso porque as empresas da HFT podem usar esta vantagem de informações para negociar antes das ordens pendentes, o que pode ser interpretado como a execução da frente.
O senador dos Estados Unidos, Charles Schumer, havia instado a Comissão de Valores Mobiliários em julho de 2009 a proibir o comércio flash, dizendo que criou um sistema de duas camadas onde um grupo privilegiado recebeu tratamento preferencial, enquanto os investidores de varejo e institucionais foram colocados em desvantagem injusta e privados de um preço justo para suas transações.
O tempo decorrido a partir do momento em que um sinal é enviado para o recibo. Uma vez que a menor latência é igual à velocidade mais rápida, os comerciantes de alta freqüência gastam pesadamente para obter o hardware, o software e as linhas de dados mais rápidos do computador, de modo a executar ordens o mais rápido possível e ganhar uma vantagem competitiva na negociação.
O maior determinante da latência é a distância que o sinal tem para viajar ou o comprimento do cabo físico (geralmente fibra óptica) que transporta dados de um ponto para outro. Uma vez que a luz no vácuo viaja a 186.000 milhas por segundo ou 186 milhas por minuto, uma empresa HFT com seus servidores co-localizados dentro de uma troca teria uma latência muito menor - e, portanto, uma vantagem comercial - do que uma empresa rival localizada a quilômetros de distância .
Curiosamente, os clientes de co-localização de uma troca recebem a mesma quantidade de comprimento do cabo independentemente de onde estão localizados dentro das instalações de troca, de modo a garantir que tenham a mesma latência.
Rebates de liquidez.
A maioria das trocas adotou um "modelo criador de fabricantes" para subsidiar a provisão de liquidez de ações. Neste modelo, os investidores e os comerciantes que colocam ordens limitadas geralmente recebem um pequeno desconto da bolsa após a execução de suas ordens, porque são considerados como tendo contribuído para a liquidez no estoque, ou seja, são "fabricantes" de liquidez.
Por outro lado, aqueles que colocam ordens de mercado são considerados "compradores" de liquidez e são cobrados uma taxa modesta pela troca por suas ordens. Embora os descontos sejam tipicamente frações de um centavo por ação, eles podem somar valores significativos sobre os milhões de ações negociadas diariamente por comerciantes de alta freqüência. Muitas empresas HFT empregam estratégias de negociação especificamente projetadas para capturar o máximo possível de descontos de liquidez.
Motor correspondente.
O algoritmo de software que forma o núcleo do sistema de comércio de uma troca e combina continuamente com ordens de compra e venda, uma função anteriormente realizada por especialistas no setor de comércio. Uma vez que o motor de correspondência corresponde a compradores e vendedores para todas as ações, é de vital importância para assegurar o bom funcionamento de uma troca. O motor correspondente reside nos computadores da troca e é a principal razão pela qual as empresas HFT tentam estar tão perto dos servidores de troca quanto possível.
Refere-se à tática de ingresso em pequenos pedidos comercializáveis ​​- geralmente para 100 ações - para conhecer grandes encomendas ocultas em piscinas ou trocas escuras. Enquanto você consegue pensar em fazer ping como sendo análogo a um navio ou submarino que envia sinais de sonar para detectar obstruções próximas ou vasos inimigos, no contexto HFT, o ping é usado para encontrar "presas" escondidas.
Veja como - as empresas de compra usam sistemas de negociação algorítmica para dividir grandes encomendas em mais pequenos e alimentá-los firmemente no mercado, de modo a reduzir o impacto no mercado de grandes pedidos. Para detectar a presença de grandes encomendas, as empresas HFT colocam ofertas e oferece em lotes de 100 partes para cada estoque listado.
Uma vez que uma empresa obtém um "ping" (ou seja, a pequena ordem do HFT é executada) ou uma série de pings que alertam o HFT para a presença de uma grande ordem de compra, pode se envolver em uma atividade comercial predatória que garanta um risco quase - lucro livre à custa do comprador, que acabará recebendo um preço desfavorável por sua grande ordem. Pinging foi comparado a "baiting" por alguns jogadores influentes do mercado, já que seu único objetivo é atrair instituições com grandes pedidos para revelar sua mão.
Ponto de presença.
O ponto em que os comerciantes se conectam a uma troca. Para reduzir a latência, o objetivo das empresas HFT é chegar o mais próximo possível do ponto de presença. Veja também "Co-localização".
Negociação Predatória.
Práticas de negociação empregadas por alguns comerciantes de alta freqüência para fazer lucros quase sem risco à custa dos investidores. No livro de Lewis, a troca de IEX, que busca combater alguns dos mais astutos HFT, identifica três atividades que constituem comércio predatório:
"Arbitragem de mercado lento" ou "arbitragem de latência", em que um comerciante de alta freqüência arbitra diferenças de preços de ações entre várias trocas. "Electronic front running", que envolve uma corrida da empresa HFT antes de uma grande ordem do cliente em uma troca, acumulando todas as ações oferecidas em várias outras trocas (se é uma ordem de compra) ou acertando todas as licitações (se for uma ordem de venda), e depois virar e vendê-los (ou comprá-los) do cliente e embolsar a diferença. "Rebate arbitrage" envolve a atividade HFT que tenta capturar descontos de liquidez oferecidos pelas trocas sem realmente contribuir para a liquidez. Veja também "Reembolsos de liquidez".
Processador de informações de valores mobiliários.
A tecnologia usada para coletar cotações e trocar dados de diferentes intercâmbios, reunir e consolidar esses dados e divulgar continuamente cotações e negócios de preços em tempo real para todos os estoques. O SIP calcula o National Best Bid and Offer (NBBO) para todas as ações, mas devido ao grande volume de dados que tem para lidar, tem um período de latência finita.
A latência de um SIP no cálculo do NBBO é geralmente superior à das empresas HFT (por causa dos computadores mais rápidos e co-localização), e essa diferença de latência - estimada por Lewis ocasionalmente atingir até 25 milissegundos - isso é no centro da atividade predatória de HFT. Nasdaq OMX Group e NYSE Euronext executam cada um SIP em nome das 11 bolsas nos EUA.
Smart Routers.
Tecnologia que determina a que ordens ou trocas são enviadas. Os roteadores inteligentes podem ser programados para enviar peças de grandes pedidos (depois que eles são quebrados por um algoritmo de negociação) para obter uma execução econômica econômica. Um roteador inteligente como um roteador econômico seqüencial pode direcionar uma ordem para um pool escuro e, em seguida, para uma troca (se não for executada no primeiro), ou para uma troca onde é mais provável que receba um desconto de liquidez.
The Bottom Line.
HFT tem feito ondas e penas ruffling (para usar uma metáfora mista) nos últimos anos. Mas, independentemente da sua opinião sobre o comércio de alta freqüência, familiarizar-se com esses termos HFT deve permitir que você melhore sua compreensão sobre esse tema controverso.

Sistemas de negociação de baixa latência
Obter através da App Store Leia esta publicação em nosso aplicativo!
Sistemas de negociação de baixa latência usando o C ++ no Windows?
Parece que todos os principais bancos de investimento usam o C ++ no Unix (Linux, Solaris) para suas aplicações de servidor de baixa latência / alta freqüência. Por que o Windows geralmente não é usado como uma plataforma para isso? Existem razões técnicas pelas quais o Windows não pode competir?
Os requisitos de desempenho nos sistemas de latência extremamente baixa utilizados para negociação algorítmica são extremos. Neste ambiente, os microseconds contam.
Não tenho certeza sobre o Solaris, mas o caso do Linux, esses caras estão escrevendo e usando patches e personalizações de baixa latência para o kernel inteiro, dos drivers de placa de rede instalados. Não é que haja uma razão técnica pela qual isso não poderia ser feito no Windows, mas há um procedimento prático / legal - acesso ao código-fonte e a capacidade de recompilá-lo com as mudanças.
Tecnicamente, não. No entanto, há um motivo de negócios muito simples: o resto do mundo financeiro é executado no Unix. Os bancos são executados no AIX, o mercado de ações em si é executado no Unix e, portanto, é simplesmente mais fácil encontrar programadores no mundo financeiro que são usados ​​para um ambiente Unix, em vez de um Windows.
(Eu trabalhei em bancos de investimento por 8 anos) Na verdade, bastante do que os bancos chamam baixa latência é feito em Java. E nem mesmo o Java em tempo real - apenas Java normal com o GC desligado. O principal truque aqui é ter certeza de ter exercido todo o seu código o suficiente para que o jit tenha executado antes de trocar uma VM específica em prod (então você tem algum loop de inicialização que é executado por alguns minutos - e failover a quente) .
Os motivos para usar o Linux são:
A administração remota ainda é melhor, e também um baixo impacto - terá um efeito mínimo sobre os outros processos na máquina. Lembre-se, esses sistemas são freqüentemente localizados na troca, então os links para as máquinas (de você / sua equipe de suporte) provavelmente serão piores do que aqueles para seus datacentres normais.
Tunability - a capacidade de configurar swappiness para 0, obter a JVM para pré-alocar grandes páginas, e outros truques de baixo nível são bastante úteis.
Tenho certeza de que você poderia conseguir o Windows funcionar de forma aceitável, mas não há nenhuma grande vantagem em fazê-lo - como outros disseram, qualquer empregado que você poached teria que redescobrir todos os seus truques de latência em vez de simplesmente executar uma lista de verificação.
Razão é simples, há 10-20 anos, quando esses sistemas surgiram, os servidores "multidimensionais" hardcore eram SOMENTE em algum tipo de UNIX. O Windows NT estava no kinder-garden estes dias. Então, o motivo é "histórico".
Os sistemas modernos podem ser desenvolvidos no Windows, é apenas uma questão de gosto nos dias de hoje.
PS: Estou trabalhando em um desses sistemas :-)
Linux / UNIX são muito mais utilizáveis ​​para usuários remotos simultâneos, tornando mais fácil o script em torno dos sistemas, use ferramentas padrão como grep / sed / awk / perl / ruby ​​/ less em logs. ssh / scp. Todas essas coisas estão lá.
Há também problemas técnicos, por exemplo: para medir o tempo decorrido no Windows, você pode escolher entre um conjunto de funções com base no controle do relógio do Windows e no QueryPerformanceCounter (). O primeiro é incrementos cada 10 a 16 milissegundos (nota: alguma documentação implica mais precisão - por exemplo, os valores da medida GetSystemTimeAsFileTime () para 100ns, mas eles relatam o mesmo limite de 100ns do relógio para que ele seja novamente marcado). O último - QueryPerformanceCounter () - tem problemas de parada onde diferentes núcleos / cpus podem relatar relógios - desde a inicialização que diferem em vários segundos devido ao aquecimento em diferentes momentos durante a inicialização do sistema. O MSDN documenta isso como um possível erro do BIOS, mas é comum. Então, quem quer desenvolver sistemas de negociação de baixa latência em uma plataforma que não pode ser instrumentada adequadamente? (Existem soluções, mas você não encontrará nenhum software que esteja sentado convenientemente em boost ou ACE).
Muitas variantes Linux / UNIX têm muitos parâmetros facilmente ajustáveis ​​para compensar latência para um único evento contra a latência média sob carga, tamanhos de fatia de tempo, políticas de agendamento, etc. Em sistemas operacionais de código aberto, também há a garantia de que vem com a capacidade de consulte o código quando você acha que algo deve ser mais rápido do que é, e o conhecimento de que uma comunidade (potencialmente enorme) de pessoas tem sido e está fazendo isso de forma crítica - com o Windows, obviamente, é principalmente as pessoas que são designadas para olhe para ele.
No lado do FUD / reputação - um pouco intangível, mas uma parte importante dos motivos da seleção do sistema operacional - eu acho que a maioria dos programadores da indústria apenas confiaria no Linux / UNIX mais para fornecer um agendamento e um comportamento confiáveis. Além disso, o Linux / UNIX tem uma reputação de falhar menos, embora o Windows seja bastante confiável nos dias de hoje, e o Linux possui uma base de código muito mais volátil do que o Solaris ou o FreeBSD.
Há uma variedade de razões, mas a razão não é apenas histórica. Na verdade, parece que cada vez mais aplicativos do lado do servidor funcionam no * nix hoje em dia do que nunca (incluindo grandes nomes como London Stock Exchange, que mudou de uma plataforma). Para aplicativos do lado do cliente ou da área de trabalho, seria bobo segmentar qualquer coisa que não o Windows, pois essa é a plataforma estabelecida. No entanto, para aplicativos do lado do servidor, a maioria dos lugares em que trabalhei para implementar no * nix.
Eu concordo parcialmente com a maioria das respostas acima. Embora o que eu percebi é o maior motivo para usar o C ++, é porque é relativamente mais rápido com uma vasta biblioteca STL.
Além disso, o sistema linux / unix também é usado para aumentar o desempenho. Eu conheço muitas equipes de baixa latência que vão até uma extensão de ajustar o kernel do linux. Obviamente, esse nível de liberdade não é fornecido pelo Windows.
Outras razões, como os sistemas legados, o custo da licença, os recursos também contam, mas são fatores de condução menores. Como "rjw" mencionado, eu vi equipes usar Java também com uma JVM modificada.
Eu secundo as opiniões de histórico e o acesso à manipulação de kernel.
Além desses motivos, eu também acredito que, assim como como eles eliminam a coleta de lixo e o mecanismo similar em Java ao usar essas tecnologias em baixa latência. Eles podem evitar o Windows por causa da API no nível alto, que interagem com ossos de baixo nível e depois o kernel.
Portanto, o núcleo é, naturalmente, o kernel que pode ser interagido com o uso do baixo nível os. As APIs de alto nível são fornecidas apenas para facilitar a vida dos usuários comuns. Mas, no caso de baixa latência, esta é uma camada gordurosa e uma perda de fração de segundos em torno de cada operação. Então, uma opção lucrativa para ganhar poucos segundos por chamada.
Além disso, essa outra coisa a considerar é a integração. A maioria dos servidores, centros de dados e intercâmbios usam UNIX e não o Windows, portanto, usar os clientes da mesma família facilita a integração e a comunicação.
Então você tem problemas de segurança (muitas pessoas lá fora, talvez não concordem com este ponto, porém) hackear o UNIX não é fácil comparado ao hacking WINDOWS. Eu não concordo que o licenciamento deve ser o problema para os bancos porque eles duchem dinheiro em cada peça de hardware e software e as pessoas que os personalizam, então as licenças de compra não serão tão maiores quanto a questão quando consideradas o que ganham comprando.

Sistemas de negociação de baixa latência
Obter através da App Store Leia esta publicação em nosso aplicativo!
Quão rápido são os sistemas de negociação HFT de última geração hoje?
Todo o tempo que você ouve sobre comércio de alta freqüência (HFT) e quão rápido são os algoritmos. Mas estou pensando - o que é rápido nos dias de hoje?
Não estou pensando na latência causada pela distância física entre uma troca e o servidor que executa um aplicativo comercial, mas a latência introduzida pelo próprio programa.
Para ser mais específico: qual é o tempo decorrido dos eventos que chegam no fio em um aplicativo para esse aplicativo, emite um pedido / preço no fio? Isto é, hora do tic-to-trade.
Estamos falando sub-milissegundo? Ou sub-microssegundo?
Como as pessoas conseguem essas latências? Codificação em montagem? FPGAs? Código de C ++ bom e antigo?
Foi recentemente publicado um artigo interessante sobre o ACM, fornecendo muitos detalhes sobre a tecnologia HFT de hoje, que é uma excelente leitura:
Você recebeu excelentes respostas. Há um problema, porém - a maioria das algotrading é um segredo. Você simplesmente não sabe o quão rápido é. Isso vai nos dois sentidos - alguns podem não dizer o quão rápido eles funcionam, porque eles não querem. Outros podem, digamos, "exagerar", por muitas razões (atraindo investidores ou clientes, por um).
Os rumores sobre picossegundos, por exemplo, são bastante escandalosos. 10 nanosegundos e 0,1 nanosegundos são exatamente a mesma coisa, porque o tempo necessário para que a ordem atinja o servidor de negociação seja muito mais do que isso.
E, o mais importante, embora não seja o que você perguntou, se você tentar negociar algorítmicamente, não tente ser mais rápido, tente ser mais inteligente. Eu vi algoritmos muito bons que podem lidar com segundos de latência e ganhar muito dinheiro.
Eu sou o CTO de uma pequena empresa que fabrica e vende sistemas HFT baseados em FPGA. Construindo nossos sistemas no topo do Solarflare Application Onload Engine (AOE), estamos constantemente oferecendo latência de um evento de mercado "interessante" no fio (10Gb / S UDP market data feed de ICE ou CME) para o primeiro byte do mensagem de ordem resultante atingindo o fio na faixa de 750 a 800 nanosegundos (sim, submicosegundo). Nós antecipamos que nossos sistemas de próxima versão estarão na faixa de 704 a 710 nanosegundos. Algumas pessoas reivindicaram um pouco menos, mas isso é em um ambiente de laboratório e na verdade não está sentado em uma COLO em Chicago e limpa as ordens.
Os comentários sobre física e "velocidade da luz" são válidos, mas não relevantes. Todo mundo que é sério sobre a HFT tem seus servidores em um COLO na sala ao lado do servidor da troca.
Para entrar neste domínio sub-microsegundo, você não pode fazer muito na CPU do host, exceto os comandos de implementação da estratégia de alimentação para o FPGA, mesmo com tecnologias como o bypass do kernel você tem 1.5 microssegundos de despesas gerais inevitáveis. então neste domínio tudo está jogando com FPGAs.
Uma das outras respostas é muito honesta ao dizer que, neste mercado altamente secreto, poucas pessoas falam sobre as ferramentas que eles usam ou seu desempenho. Cada um de nossos clientes exige que nem digamos a ninguém que eles usem nossas ferramentas nem divulguem nada sobre como elas as usam. Isso não só dificulta o marketing, mas também evita o bom fluxo de conhecimento técnico entre colegas.
Devido a esta necessidade de entrar em sistemas exóticos para a parte do mercado "wicked fast", você descobrirá que os Quants (as pessoas que aparecem nos algoritmos que fazemos rápido) estão dividindo seus algos em eventos-a - camadas de tempo de resposta. No topo da tecnologia, o heap é o sistema de microsecondos secundários (como o nosso). A próxima camada são os sistemas C ++ personalizados que fazem uso intenso do bypass do kernel e estão na faixa de 3-5 microsegundos. A próxima camada são as pessoas que não podem se dar ao luxo de estar em um fio de 10Gb / S apenas um roteador de lúpulo da "troca", eles podem estar ainda em COLO, mas por causa de um jogo desagradável que chamamos de "roleta de porta" eles estão no dezenas de centenas de microsecondos. Uma vez que você entra em milissegundos, quase não é HFT.
"sub-40 microssegundos", se você quiser acompanhar a Nasdaq. Esta figura é publicada aqui nasdaqomx / technology /
Bom artigo que descreve o estado do HFT (em 2011) e fornece algumas amostras de soluções de hardware que tornam possível o nanossegundo: as ruas de parede precisam de velocidade de negociação: a era de nanosegundo.
Com a corrida pela menor "latência" continuando, alguns participantes do mercado estão falando sobre picossegundos - trilhões de segundo.
EDIT: Como Nicholas mencionou gentilmente:
O link menciona uma empresa, a Fixnetix, que pode "preparar um comércio" em 740ns (ou seja, o tempo de um evento de entrada ocorre a uma ordem que está sendo enviada).
Para o que vale a pena, o produto de mensagens FTL da TIBCO é sub-500 ns para dentro de uma máquina (memória compartilhada) e alguns micro segundos usando RDMA (Remote Direct Memory Access) dentro de um data center. Depois disso, a física se torna a principal parte da equação.
Então, essa é a velocidade com que os dados podem ser obtidos a partir do feed para o aplicativo que toma decisões.
Pelo menos um sistema reivindicou.
30ns mensagens interthread, que provavelmente é um benchmark tweaked up, então qualquer um que fala sobre números mais baixos está usando algum tipo de CPU mágica.
Uma vez que você está no aplicativo, é apenas uma questão de quão rápido o programa pode tomar decisões.
Hoje em dia, o tic-to-trade de um dígito em microssegundos é a barra para empresas HFT competitivas. Você deve poder fazer dígitos únicos altos usando apenas o software. Então & lt; 5 usec com hardware adicional.
O comércio de alta freqüência ocorreu pelo menos desde 1999, depois que a Bolsa de Valores dos EUA (SEC) autorizou o intercâmbio eletrônico em 1998. Na virada do século 21, os negócios da HFT tiveram um tempo de execução de vários segundos, enquanto que até 2010 diminuiu em milissegundos e até mesmo em microssegundos.
Nunca será inferior a alguns microsegundos, devido ao limite de velocidade de em-w / luz, e apenas um número sortudo, que deve estar em menos de um quilômetro de distância, pode até sonhar em aproximar-se disso.
Além disso, não há codificação, para alcançar essa velocidade, você deve se tornar físico ... (o cara com o artigo com o interruptor 300ns, que é apenas a latência adicional desse switch!, Igual a 90m de viagem através de um óptico e um pouco menos em cobre)

Usando o C ++ para sistemas de baixa latência.
Esta aula foi ministrada em 2016 e está online apenas para fins históricos.
& # 8220; Usando o C ++ para sistemas de baixa latência & # 8221; é um curso de treinamento de dois dias ministrado por Patrice Roy da Universidade de Sherbrooke. É oferecido no Meydenbauer das 9h às 17h nos sábados e domingos, 17 e 17 de setembro (imediatamente antes da conferência). O almoço está incluído.
Descrição do Curso.
Para obter o tipo de desempenho exigido por algumas das aplicações mais exigentes, como jogos e negociação de alta freqüência, requer o domínio das técnicas de baixa latência não encontradas no C ++ convencional.
Esta classe lhe dará as habilidades necessárias para criar sistemas de baixa latência em C ++:
Como desenvolver componentes para sistemas com restrições de baixa latência Como desenvolver sistemas com desempenho previsível, particularmente onde o tempo de execução do pior caso entra em jogo Como executar computação em tempo de compilação em vez de em tempo de execução quando esta é uma opção Como reduzir o sobrecarga espacial de seus programas Como tornar o gerenciamento de memória mais eficiente, de várias maneiras Como tirar o máximo proveito da memória cache Como tirar o máximo proveito de ponteiros inteligentes Como medir o desempenho de seus programas de forma portátil.
A ênfase será colocada em código portátil e usará recursos C ++ 11 / C ++ 14. Os exemplos serão apoiados por medições e a discussão aberta será encorajada.
Pré-requisitos.
Os participantes devem ter conhecimento intermediário da linguagem C ++; A ênfase será colocada em código C ++ robusto com previsão & # 8212; e rápido & # 8212; comportamento de tempo de execução.
Este curso inclui exercícios, portanto, traga seu laptop e seu ambiente de desenvolvimento C ++ 11/14 favorito.
Tópicos do curso.
Este curso se concentrará em técnicas que os programadores podem usar para obter um desempenho melhor ou mais estável de sistemas com restrições de baixa latência. É subdividido em seções que cobrem subconjuntos selecionados deste tópico importante. Cada seção discute recursos C ++ que ajudam a alcançar os objetivos da seção, com ênfase em recursos C ++ 11/14, onde quer que isso faça sentido.
Definimos o que queremos dizer com "baixa latência"; discutir as semelhanças e diferenças com os sistemas em tempo real; introduzir os conceitos do tempo de execução do pior caso e discutir as utilidades e técnicas de medição. Os aspectos orientados para a resiliência da programação em C ++ serão abordados aqui, mas isso será um tema recorrente ao longo do curso.
Os recursos C ++ utilizados incluirão static_assert, utilitários, modelos variadic e mecanismos de dedução automática do tipo.
Alguns recursos do C ++ têm altos níveis e poucas ou nenhuma desvantagem para o desenvolvimento de sistemas de baixa latência. Nesta seção do curso, exploraremos e usaremos alguns dos mais relevantes.
Os recursos de C ++ usados ​​incluirão unique_ptr e make_unique, constexpr, mecanismos de dedução de tipos automáticos, tipos de traços, enable_if, usos interessantes da palavra-chave usada e semântica de movimento.
Recursos C ++ para usar com cuidado em sistemas de baixa latência.
Existem recursos C ++ que podem ser usados ​​para sistemas de baixa latência, mas com particular cuidado, pois eles têm custos que podem ser superiores aos seus benefícios. Tomaremos uma abordagem fundamentada, baseada em medição, para construir um julgamento informado.
Os recursos C ++ usados ​​incluirão shared_ptr e make_shared, exceções, herança múltipla, RTTI e substituições usadas-definidas. Também discutiremos o papel que não pode assumir nos sistemas.
Alavancando recipientes e algoritmos padrão em sistemas de baixa latência.
Algumas empresas reescrevem alguns ou todos os recipientes de padrões devido à crença de que suas necessidades não podem ser satisfeitas pelas ferramentas que esta biblioteca oferece. Exploraremos maneiras de tirar o máximo proveito dos contêineres e os algoritmos fornecidos pela biblioteca padrão e examinar maneiras de aprimorá-los quando apropriado.
Concorrência e Programação Paralela.
Os problemas de sistemas de baixa latência sobrepõem as de sistemas paralelos e concorrentes de diferentes maneiras: reduzir a dependência de operações de bloqueio e instalações de sincronização, por exemplo, é uma forte tendência nessas duas áreas.
Os recursos de C ++ usados ​​incluirão ferramentas de encadeamento e atômica C ++ 11/14, mas com ênfase nos padrões de uso que permitem aos componentes reagir em tempo hábil aos eventos.
O C ++ permite que os programadores gerenciem a alocação de memória manualmente de maneiras diversas e interessantes. Nós exploraremos maneiras de usar esses mecanismos para nossa vantagem ao construir sistemas de baixa latência.
Os recursos C ++ utilizados incluirão operadores especializados novos e excluídos de várias maneiras, entendendo posicionamento novo e como escrever alocadores antes e desde C ++ 11.
Houve uma série de apresentações interessantes sobre o uso da memória cache e seu impacto no desempenho do programa. Exploraremos as nuances desta questão com exemplos.
Os recursos C ++ utilizados incluirão contêineres STL e algoritmos, mecanismos de controle de alinhamento, bem como utilitários de programação paralelos e concorrentes.
Claro, quando é prático fazê-lo, os programas mais rápidos são aqueles que não fazem nada. Exploraremos algumas maneiras de combinar técnicas de metaprogramação com pequenos programas, a fim de mover a computação para compilar o tempo quando há benefícios ao fazê-lo.
Instrutor do curso.
Patrice Roy jogou com C ++, profissionalmente, por prazer ou (na maioria das vezes) tanto por mais de 20 anos. Depois de alguns anos, fazendo R & D e trabalhando em simuladores de vôo militares, ele passou a acadêmicos e tem ensinado ciência da computação desde 1998. Desde 2005, ele participou mais especificamente para ajudar estudantes de pós-graduação e profissionais dos campos de sistemas em tempo real e programação de jogos desenvolvem as habilidades de que precisam para enfrentar os desafios de hoje. A evolução rápida do C ++ nos últimos anos tornou seu trabalho ainda mais agradável.
Ele foi um membro participante no Comitê de Padrões ISO C ++ desde o final de 2014 e esteve envolvido com as Vulnerabilidades de Linguagem de Programação ISO desde o final de 2015. Ele tem cinco filhos e sua esposa assegura que sua casa abriga um número continuamente em mudança de gatos, cachorros e outros animais.
Citação do participante.
"Aprendendo sobre todas as coisas que eu não sabia que eu não sabia. Eu realmente não entendi a metaprogramação do modelo C ++ antes da conferência e havia muitos recursos do C ++ 11 que eu não entendi tão bem como eu agora. "

No comments:

Post a Comment