Programmazione asincrona e multithread in MQL - pagina 39

 
Andrey Barinov:
...

Cosa si può trovare a occhio in una tabella di 1000 righe scorrendo? Quale problema viene risolto?

P.S. Di nuovo offtopic...

Andrew, il compito era di permettere all'utente di creare qualsiasi tabella. Come in Sharp. Non si sa mai cosa può avere in mente...)).

Suggerisco di terminare l'offtopic)).


Per essere giusti, si può ridisegnare solo la parte visibile della tabella, e solo ridisegnare la parte invisibile su un evento di scorrimento. Ma di nuovo, questo era un test di stress.


Tutto dipende da come cambiano esattamente i valori nella tabella. Se i valori cambiano molto rapidamente e costantemente, allora è meglio ridisegnare solo l'area visibile, e ridisegnare l'invisibile durante lo scorrimento. Se i valori cambiano poco frequentemente, è meglio ridisegnare tutto in una volta, in modo che al momento dell'inizio dello scorrimento non ci sia un ritardo dovuto al ridisegno. Dato che non si sa mai esattamente quanto spesso i valori della tabella cambieranno, ho scelto un metodo universale: ridisegnare tutto in una volta. Non si vedono molte tabelle con valori che saltano come pazzi, quindi è meglio ridisegnarle tutte insieme. Quindi, è meglio ridisegnare l'intera tela in una volta sola e bypassare il ritardo all'inizio dello scorrimento.

Hai visto quanto tempo ci vuole per ridisegnare una tela di 900*7000 pixel? Anche con MT5, questo ritardo può raggiungere centinaia di millisecondi. È molto sgradevole ottenere un tale ritardo quando si inizia a scorrere. Quindi, se la frequenza di ridisegno è bassa, è meglio disegnare tutto in una volta.

Tornando all'argomento - questa è una delle ragioni per la necessità del multi-threading in MT5)!


Un'ultima cosa. Per evitare il problema del sovraccarico del processore quando si ridisegnano troppo spesso grandi tabelle, ho scelto un altro modo. Ho fatto un regolatore speciale per regolare la velocità di cambiamento dei valori. Cioè, i valori cambiano rapidamente, ma l'utente regola la velocità della loro uscita (ridisegno) con il cursore (l'ho mostrato). Così, il carico sul processore è ridotto a volte e l'utente è più comodo per percepire le informazioni dalla tabella.

 
Реter Konow:

Andrei, il compito era di permettere all'utente di creare qualsiasi tabella. Proprio come in Sharp. Non si sa mai cosa si mette in testa...))

Suggerisco di finire offtopic)).


Per essere giusti, si può ridisegnare solo la parte visibile della tabella, si può ridisegnare la parte invisibile solo su un evento di scorrimento. Ma di nuovo, era un test di stress.


SZY. Tutto dipende da come cambiano esattamente i valori nella tabella. Se i valori cambiano molto rapidamente e costantemente, allora è meglio ridisegnare solo l'area visibile, e ridisegnare l'invisibile durante lo scorrimento. Se i valori cambiano poco frequentemente, è meglio ridisegnare tutto in una volta, in modo che al momento dell'inizio dello scorrimento non ci sia un ritardo dovuto al ridisegno. Dato che non si sa mai esattamente quanto spesso i valori della tabella cambieranno, ho scelto un metodo universale: ridisegnare tutto in una volta. Non si vedono molte tabelle con valori che saltano come pazzi, quindi è meglio ridisegnarle tutte insieme. Quindi, è meglio ridisegnare l'intera tela in una volta sola e bypassare il ritardo all'inizio dello scorrimento.

Hai visto quanto tempo ci vuole per ridisegnare una tela di 900*7000 pixel? Anche con MT5, questo ritardo può raggiungere centinaia di millisecondi. È molto sgradevole ottenere un tale ritardo quando si inizia a scorrere. Quindi, se la frequenza di ridisegno è bassa, è meglio disegnare tutto in una volta.

Tornando all'argomento - questa è una delle ragioni per la necessità del multithreading in MT5)!


Un'ultima cosa. Per evitare il problema del sovraccarico del processore quando si ridisegnano troppo spesso grandi tabelle, ho scelto un altro modo. Ho fatto un regolatore speciale per regolare la velocità di cambiamento dei valori. Cioè, i valori cambiano rapidamente, ma l'utente regola la velocità della loro uscita (ridisegno) con il cursore (l'ho mostrato). Così, il carico sul processore è ridotto a volte e l'utente è più comodo per percepire le informazioni dalla tabella.

Peter, capisci la differenza tra asincronia, multithreading e parallelismo?

 
Sergey Chalyshev:

Peter, capisci la differenza tra asincronia, multithreading e parallelismo?

Ti suggerisco di fare un esempio di operazione asincrona o parallela in un singolo thread.
 
Реter Konow:
Suggerisco di dare un esempio di operazione asincrona o parallela nello stesso thread.

Va bene, fatevi sotto!

 
Sergey Chalyshev:

OK, Fatti sotto!

Non ne conosco nessuno.

Il flusso offre solo una sequenza, ed è difficile essere paralleli all'interno di una sequenza ristretta. Si può essere asincroni all'interno di una sequenza solo speculativamente, guardando indietro ai propri precedenti passaggi rotatori e notando nuove svolte sul vecchio percorso, pensando orgogliosamente di seguire un nuovo cammino...

Capite, i limiti del single-threading non possono essere superati dall'ingegnosità di un codificatore sicuro di sé che crede che innumerevoli linee parallele possano passare attraverso un singolo punto. Questa geometria non euclidea non si adatta alle realtà del programma e non aggiunge asincronia ai processi all'interno del thread.
 
Sergey Chalyshev:

Va bene, fatevi sotto!

Battere le mani con una sola mano? Lo zen verso l'esterno non è zen :-)

Beh, sai per certo che Peter rimane fuori dalla sandbox. In pratica non riesce a capire i termini.

Che senso ha fare domande del genere? Beh, comincerà a blaterare come un giornalista professionista.

 
Maxim Kuznetsov:

Battere le mani con una sola mano? Lo zen verso l'esterno non è zen :-)

Beh, sai per certo che Peter rimane fuori dalla sandbox. In pratica non riesce a capire i termini.

Che senso ha fare domande del genere? Beh, comincerà a blaterare come un giornalista professionista.

Perché avrebbe dovuto sbagliare? Sto ridendo. Bene, allora dammi un esempio di asincronia a thread singolo con il parallelismo. Se è qualcosa di diverso dall'autolesionismo, ammetterò di avere torto.
 
Ragazzi, beh, logica elementare. Bene, come fare qualcosa di asincrono in un thread, saltando su una singola sequenza di azioni? L'unico modo è muoversi in cerchio e ad ogni iterazione decidere quali operazioni eseguire e quali rimandare. Ma è un'asincronia normale? Non dobbiamo assolutamente parlare di parallelismo. Che tipo di parallelismo possiamo avere in un thread? ))

Due thread - due sequenze di azioni separate, asincrone tra loro.
 
Реter Konow:
Beh, ragazzi, è una logica elementare. Bene, come può un thread fare qualcosa di asincrono, saltando su una singola sequenza di operazioni? L'unico modo è muoversi in cerchio e ad ogni iterazione decidere quali operazioni eseguire e quali rimandare. Ma è un'asincronia normale? Non dobbiamo assolutamente parlare di parallelismo. Che tipo di parallelismo possiamo avere in un thread? ))

Due thread sono due sequenze di azioni separate, asincrone tra loro.

Due o ventidue thread possono essere sincroni o asincroni. Un singolo thread può includere sia operazioni sincrone che asincrone. Lei ha indicato come. Parallelo non sa come includere quelli paralleli.

 
Реter Konow:
Ragazzi, beh, logica elementare. Bene, come fare qualcosa di asincrono in un thread, saltando su una singola sequenza di azioni? L'unico modo è muoversi in cerchio e ad ogni iterazione decidere quali operazioni eseguire e quali rimandare. Ma è un'asincronia normale? Non dobbiamo assolutamente parlare di parallelismo. Che tipo di parallelismo possiamo avere in un thread? ))

I due thread sono due sequenze di azioni separate, asincrone tra loro.

Una chiamata asincrona non crea necessariamente un nuovo thread

Motivazione: