MT5 e velocidade em ação - página 75

 
Valeriy Yastremskiy:

Eu não sou especialista em gráficos. A importância é determinada pela dependência do início de outras tarefas a partir do final do atual. outros critérios são secundários. mas há também o tempo de execução da tarefa. Em geral, é difícil e muito triste, é impossível mudar um algoritmo priorizado na mosca. Pelo lado bom, gostaria de alguns esclarecimentos dos desenvolvedores antes que surjam quaisquer dúvidas. É complicado, mas é o objetivo certo no desenvolvimento do meio ambiente.

Trecho de uma descrição de como isto funciona em sistemas em tempo real.

Normalmente, as prioridades são dinâmicas, o que significa que elas podem ser alteradas em tempo de execução pelos próprios processos, bem como pelo sistema operacional.
A resposta às interrupções é separada dos cálculos intensivos da CPU.
Assim que um evento ou interrupção ocorre, seu manipulador é imediatamente incluído na fila de processos prontos.
Os programas de interrrompedores são geralmente compactos porque devem fornecer uma resposta rápida,
por exemplo, a entrada de novos dados e o controle de transferência para processos mais complexos de CPU-intensiva que são executados com menor prioridade.

 
Roman:

Olá Nikolai. Isso é verdade.
Mas não haverá o mesmo problema que a sincronização de que Slava fala, ou seja, freios injustificados.
Ou talvez não haja nenhum problema? )) Talvez seja mais fácil não usar o modelo assíncrono do que sincronizá-lo com as prioridades? ))

Hi.
Não sou especialista em assíncronia e interrupções, embora tenha algum conhecimento e experiência.
Não deve haver problema algum com a questão do temporizador. Como a seqüência não é importante, o que importa é a periodicidade. Não importa realmente como é tratado pelo chefe, que é responsável pela alocação de recursos.
Além disso, como eu entendo, o temporizador é baseado em interrupções de hardware do sistema. Penso que todo o sistema de controle assíncrono é implementado utilizando interrupções de hardware, incluindo as do temporizador.
Ainda me pergunto como são as interrupções de recursos intensivos.
Por exemplo, uma interrupção do sistema vem do temporizador da CPU para realizar um incremento de uma variável global. Este incremento por si só levará o sistema cerca de 1 nanossegundo. Mas:

  • Quanto tempo leva para salvar todos os parâmetros dos processos em execução e/ou os fios necessários para retomar o trabalho?
  • Esta economia é feita por hardware ou software?
  • Quanto tempo leva para restaurar o processo?
  • Podemos medir esta intensidade de recursos? Provavelmente não, porque como se captura o momento de interrupção?
  • Qual é a ordem desses custos de recursos - dezenas, centenas de nanossegundos, microssegundos ou dezenas e centenas de microssegundos? Seria interessante obter tais informações.

Em geral, eu percebo que me falta conhecimento e experiência. É por isso que tento não entrar em questões com os desenvolvedores sobre as prioridades de assincronia. Entendo que há muitas nuances, armadilhas e obstáculos quando se tenta criar um sistema perfeito, especialmente quando se trata de ordens comerciais e obtenção de informações comerciais.
Embora, para ser honesto, eu ainda não entendo porque eles fizeram algumas funções assíncronas em 5, o que é um grande inconveniente. Quero dizer, ChartGet..., ChartTimePriceToXY, ChartXYToTimePrice.
Afinal de contas, é lógico assumir que o preenchimento da tabela de estados do gráfico deve ser assíncrono, e os comandos só devem ler os dados desta tabela. E se os dados no momento da leitura estiverem alguns milissegundos desatualizados, isso não é um problema.
O problema é que na busca de relevância de dados imaginários, ocorrem atrasos de dezenas de milissegundos, durante os quais a relevância extraída torna-se irrelevante em maior grau, se inicialmente esses comandos não fossem assíncronos, mas simplesmente ler os últimos dados conhecidos da tabela de estados do gráfico.
E a julgar pelo tempo de execução, estas funções não foram assíncronas em 4.

 
Roman:

Trecho de uma descrição de como isto funciona em sistemas em tempo real.

Normalmente as prioridades são dinâmicas, o que significa que em tempo de execução elas podem ser alteradas pelos próprios processos, bem como pelo sistema operacional.
A reação às interrupções é separada dos cálculos intensivos de CPU.
Assim que um evento ou interrupção ocorre, seu manipulador é imediatamente incluído na fila de processos prontos.
Os programas de interrrompedores são geralmente compactos porque precisam fornecer uma resposta rápida,
por exemplo, inserir novos dados e passar o controle para processos mais complexos de processamento intensivo que são executados com menor prioridade.

É exatamente como eu descrevi)))) É claro que a lógica prioritária é dinâmica. E esta é a dificuldade em estabelecer o nível. ao estabelecer o nível de prioridade não podemos determinar seu tempo de execução na lógica de priorização dinâmica no ambiente abaixo. o terminal está sempre acima do ambiente do vinho ou linux e não pode afetar a lógica de priorização do ambiente abaixo.

 
Nikolai Semko:


Nem todas as perguntas feitas são presumidas como sendo respondidas.

Como a interrupção em si é intensiva em recursos.
O mais provável depende da freqüência do processador.

Quanto tempo o processo leva para economizar, para uma nova retomada.
De acordo com os algoritmos baseados na quantização, o processo ativo é alterado se:

  • o processo terminou e deixou o sistema
  • ocorreu um erro
  • processo foi mudado para o estado STANDBY
  • processo esgotou um quantum de tempo de processamento, e

Como captar interrupções.
Um
pré-divisor é um divisor de freqüência de relógio que atua como um ou mais acionadores em T conectados em série.

 
Roman:

Nem todas as perguntas feitas devem ser respondidas.

Vá estudar o assunto (por pelo menos 10 anos) e não deite lixo neste fio, por favor.

As perguntas são discutidas aqui com um treinamento diferente e uma classe diferente.

 
Nikolai Semko:
  • Quanto tempo leva para salvar todos os parâmetros dos processos e/ou roscas em execução necessários para retomar a operação?
  • Esta economia é feita por hardware ou software?

Nada acontece desde o processador 286? não me lembro e nunca o entendi, mas desde o Pentium-1 (li um livro sobre ele, há muito tempo)

O processador trabalha em modo protegido. Todo processador tem memória virtual alocada; endereços físicos de bancos de memória (células RAM) são traduzidos em endereços virtuais (ou melhor, vice-versa?) pelo próprio processador (não lembro, mas parece ser um registro especial e um ponteiro virtual para a tabela de tradução de endereços). É tudo hardware acontecendo, não é mensurável, é o chamado núcleo do processador que distingue cada linha de processador Intel, não é o cache!

Nikolai Semko:
  • Quanto tempo leva para recuperar o processo?

qualquer programa em Win deve se registrar como um processo e criar pelo menos um tópico

então o agendador de tarefas Win alocará recursos para o processo e mensagens em fila de espera para ele, como o agendador funciona não me interessa, é suficiente que a prioridade do processo possa ser aumentada e pode ser visto que com algum esforço o PC começa a planejar, ou seja, a Microsoft dá recursos para minha aplicação, isto é o suficiente para manter o sistema operacional fora do caminho

Nikolai Semko:
  • É possível medir esta intensidade de recursos? Provavelmente não, porque como eu pego o momento da interrupção?
  • Qual é a ordem desses custos de recursos - , dezenas, centenas de nanossegundos, microssegundos ou dezenas e centenas de microssegundos? Seria interessante obter tais informações.

Ehz, medindo o quê? Interrupções são hardware, são tratadas pelo sistema operacional, é claro, com a ajuda dos motoristas.

temporizador? - se não estou enganado, o temporizador não pode acertar a fila de mensagens a não ser que o processo esteja processando, algo sobre a infalibilidade do sistema operacional, google WM_TIMER - deve ser detalhado

a ordem dos números? somente o relógio do processador pode ser medido e depois multiplicado pelo fator de cálculo do processador, foi discutidoem https://www.mql5.com/ru/forum/352454#comment_18588098 , google toneladas de informações sobre medição de desempenho

 
Renat Fatkhullin:

Vá estudar o assunto (por pelo menos 10 anos) e não se desfaça de lixo nesta linha, por favor.

Discutimos aqui questões com um treinamento diferente e uma classe diferente.

Todos devem ser enviados aqui, não seletivamente )) Mas, como sempre, leva um pontapé no chapéu de quem faz perguntas adequadas.
Depois que descobri que os manipuladores são executados em modo de bloqueio, não trouxe este tópico à tona por nada.
Eu toquei no verdadeiro cerne do problema e você não gosta. OK, vou deixar o assunto de lado.
Mas não vejo a vantagem de alcançar eventos oportunos no processamento síncrono.
Slava, Nikolay, Valery, obrigado pelo diálogo construtivo.

 
Igor Makanu:

nada acontece desde o processador 286? hmm, não me lembro e nunca lidei com ele, mas definitivamente desde o Pentium-1 (eu li um livro sobre ele, há muito tempo atrás)
É tudo hardware feito, não é mensurável, é o chamado núcleo do processador que distingue cada linha de processador Intel, não é o cache!

Bom se for.
Eu acho que é. Quase tudo está no nível do hardware. Caso contrário, a multitarefa não seria tão eficiente.

 
Nikolai Semko:

Bom se for esse o caso.
Acho que é. Quase tudo está no nível do hardware. Caso contrário, a multitarefa não seria tão eficaz.

somente assim

google: modo protegido por processador

Se não estou enganado, o modo protegido dá ao kernel do SO um nível de privilégio separado e por causa da memória virtual para cada processo - é impossível obter os dados da RAM para o programa em execução...bem, a menos que você os execute sob depuração como um processo separado.... que é outra área de especialização ))))

mas, inequivocamente, tudo funciona em nível de hardware, é impossível medi-lo, apenas ferramentas de SO - e trocar memória virtual por processos é instantâneo, e o próprio processador funciona em freqüência interna - multiplicador de CPU... e se você começar a pensar sobre o cache... por quê? - há um problema, procure uma solução! quer escrever um motorista? )))

SZZ: você pode escrever um driver, lembro quando usei o TCP-logger, ele foi instalado como um driver e registrou todo o tráfego e então por processos na tabela exibia todo o tráfego.... apenas uma coisa para pensar como a escrita de drivers ajudará a desenvolver o lucrativo TCP ))))



UPD: Hubr "O que é modo protegido e o que ele faz"https://habr.com/ru/post/118881/

UPD: Privilégio de nível de hardware(CPU) para execução de código - Wiki deAnéis Protegidos

 
Renat Fatkhullin:

É sempre garantido que você terá falhas em amostras individuais aleatórias de qualquer instrução, incluindo as mais simples do tipo assembler inc eax. Isto é arquitetônico e devido às limitações físicas de "alocar honestamente quanta de tempo de milhares de fios para um pequeno número de núcleos".

Deixe de ser estúpido e continue capturando os pedidos mais comuns por milhão.

Percebeu-se que o CopyTicks raramente se atrasa. Eu escrevi um roteiro de teste

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnTick()
{
  Sleep(1000);
  
  MqlTick Tick[1];
  
  _B(CopyTicks(_Symbol, Tick, COPY_TICKS_ALL, 0, 1), 100);
  _B(SymbolInfoTick(_Symbol, Tick[0]), 100);
}

e a executou em modo de estresse. SymbolInfoTick tem visivelmente mais alertas do que o CopyTicks.


Sem reclamações. Somente eu gostaria de entender, o que afeta a diferente percepção da carga de estresse nas implementações destas funções?