Programmazione asincrona e multithread in MQL - pagina 13

 
Реter Konow:

Se aggiungono il multithreading, vi farà sentire peggio? E così hanno aggiunto un sacco di cose a MQL, ed è una cosa davvero utile. Ma la sua utilità può essere compresa solo da una persona che scrive programmi molto complessi e ingombranti in MQL. Se non capite a cosa serve il multi-threading, significa che non scrivete programmi del genere. Quando lo farete, capirete. È molto semplice. ))

Il multithreading è sicuramente necessario, specialmente in tester, specialmente in modalità multi-strumento. Spesso mi mancano le prestazioni. Ma non sono un esperto di programmazione e non capisco molto bene le sottigliezze, so solo che ho bisogno di contare molte cose in parallelo). E mettere in parallelo il tester sarebbe estremamente utile.
 
Реter Konow:

Se aggiungono il multithreading, sarà peggio?

sicuramente no - sarà meglio, ! - MA la questione chiave qui è il supporto - chi spiegherà come usarlo? - Chi correggerà i bug? - Chi fornirà la funzionalità che è garantita per essere comprensibile?

Secondo l'idea di base degli sviluppatori come e chi usare MT, forniscono funzionalità corrispondenti a C++, rimuovendo così il "mal di testa" della formazione e della spiegazione di come funziona - la letteratura su C++ ed esempidi scrittura di programmi entry level sul web per 20 anni ha raccolto molto

Avete visto un pacchetto già pronto (secondo il problema di TC) che si applichi al C++?

 
Igor Makanu:

"esperti"? - Non hai niente di cui parlare, ficcati il tuo imho... Hai una grande comunità MQL su questo sito con professionisti in diversi campi, purtroppo, non hai mostrato nessuna delle tue conoscenze che sarebbero utili alla comunità, puoi incolparmi di nuovo per tutto quello che vuoi - "sei tu l'esperto! "


Gli sviluppatori faranno? - Non riesci nemmeno a spiegare perché è necessario, vero? )))

qual è lo scopo di MetaQoutes? - l'obiettivo, come ogni azienda IT di fare profitto! Non so perché, MetaQoutes è molto serio nel promuovere i suoi servizi, un sacco di lavoro è fatto per divulgare il trading algoritmico, per dare materiale analitico, per creare una comunità online... questo tipo di carità lo fanno solo poche aziende IT, di solito i giganti IT

così, l'azienda spende le sue risorse in qualcosa che in futuro (non è sicuro) farà un profitto.... e poi, guarda un po'... arriva un utente che ha bisogno di adattare il concetto di Python o Java ritardato a MQl.... Non lo trovate divertente? - Quanti anni hai? ))))


Rispetto che la persistenza è spesso l'unico modo per trovare la tua nicchia nella vita! Buona fortuna in questo duro lavoro!

Non c'è niente di cui parlare con te su questo argomento!
Non hai nemmeno abbastanza logica per capire quale effettivo beneficio avrà MetaQuotes dal poter scrivere programmi asincroni.
E attirerà davvero gli specialisti che scrivono programmi asincroni.
E ci sono abbastanza specialisti adeguati nella comunità, con i quali puoi discutere di problemi e idee, invece di ascoltare il tuo "io sono uno specialista".
Ahimè, per essere un esperto, bisogna stare al passo con la tecnologia, indipendentemente dalla lingua in cui viene usata.
Non senti nemmeno quello che ti dicono che anche il C++ è scritto in modo asincrono, ma probabilmente non lo capisci, non ti sei posto compiti asincroni.
E moderiamo il tuo ardore, non riesci nemmeno a comunicare normalmente.

 
Roman:

Non c'è niente di cui parlare con te su questo argomento!

non parlare, ma non c'è ancora una risposta:


rispondere alla domanda: perché il terminale di trading ne ha bisogno?
 
Maxim Romanov:
Il multithreading è sicuramente necessario, specialmente in tester, specialmente in modalità multi-strumento. Spesso mi manca il rendimento. Ma non sono un esperto di programmazione e non capisco molto bene le sottigliezze, so solo che devo contare molte cose e in parallelo). E mettere in parallelo il tester sarebbe estremamente utile.
E sto per sviluppare una visualizzazione tridimensionale, e non è ragionevole metterla in un thread con calcoli, eventi di interfaccia, eventi esterni (chiamate al server). La DLL non è adatta sempre per una ragione: non si possono distribuire programmi liberamente.
 
Igor Makanu:

sicuramente no - sarà meglio, ! - MA la questione chiave qui è il supporto - chi spiegherà come usarlo? - Chi correggerà i bug? - Chi garantirà che la funzionalità sia comprensibile?

...

Dal mio punto di vista, questo è l'ultimo dei problemi. L'importante è che la gente comunichi su questo argomento. Il forum ha bisogno di nuovi argomenti. Non è vero? Può solo migliorare. Bene, che cosa sarà critico se ci sono problemi e bug tra gli utenti? E quando non ce n'erano? )

 
Andrey Pogoreltsev:

Tu pretendi l'esecuzione asincrona delle query ma citi il multithreading come esempio... Ti ho esortato a capirlo, ma non l'hai mai fatto.

Ti ho dato una soluzione al tuo esatto problema qui: https://www.mql5.com/ru/forum/318593/page4#comment_12568119

Ma sono sicuro che non hai nemmeno studiato l'argomento.

Mi sembra che se si dà una coda asincrona, si chiederà comunque il multithreading... Almeno cerca di capire OVERLAPPED ed eventi per cominciare, non stai chiedendo a WinAPI nel tuo codice).

Se introducete il multithreading nel terminale, esso si seppellirà da programmatori sventurati, più velocemente della velocità della luce.

I programmatori cercano soluzioni ai problemi, non chiedono al framework di cambiare per adattarsi alla loro ignoranza.

No, ti sbagli, ho guardato tutto e lo farò sicuramente.
A proposito, tu sei l'unico che ha dato almeno qualche buona direzione grazie, dal resto solo flub.
C'è solo un sacco di gente che non capisce l'essenza dell'argomento, ecco perché ho dovuto rispondere alle loro domande. Ecco perché ho dovuto rispondere alle loro domande, ecco perché l'argomento è diventato più ampio.
Ci sono diverse tecnologie per il multithreading o la connessione asincrona, ecco perché molti non lo capiscono.
E ho dovuto dare frettolosamente degli esempi da Internet, ma anche questi spiegano almeno in qualche modo il succo della tecnologia.
Nessuno si è preoccupato di mostrare altre tecnologie e spiegare come funzionano, un coro.

 
Roman:

No no, ti sbagli, ho esaminato tutto, me ne occuperò senza ambiguità.
A proposito, tu sei l'unico che ha dato almeno qualche direzione vera grazie, gli altri solo flub.
Ci sono solo molte persone che non capiscono l'essenza dell'argomento, ecco perché ho dovuto rispondere alle loro domande. Ecco perché ho dovuto rispondere alle loro domande, ecco perché l'argomento è diventato più ampio.
E per quanto riguarda il multithreading o la connessione asincrona ci sono alcune tecnologie, ecco perché molti non hanno comprensione.
E ho dovuto dare frettolosamente degli esempi da Internet, ma anche questi spiegano almeno in qualche modo l'essenza della tecnologia.
Nessuno si è preoccupato di mostrare altre tecnologie e spiegare come funzionano, un coro.

Multithreading - i compiti vengono eseguiti in più thread. Può essere eseguito su un singolo processore, sempre in multithreading e passando da uno all'altro quando le quote di tempo del processore si esauriscono. Richiede la sincronizzazione per l'accesso alle risorse condivise. Può portare a deadlock, condizioni di gara, bug dirilascio della memoria e altre "sorprese".

Asincrono - esecuzione di funzioni non bloccate (cioè il controllo viene restituito immediatamente dopo l'uscita del metodo), di solito su altri dispositivi (apparecchiature di rete, dispositivi di archiviazione, periferiche, ecc. Per esempio, è possibile scrivere un server multiutente ad alte prestazioni utilizzando solo un thread e connessioni client di elaborazione della macchina finale. Tutto dipende dallo scopo di questo server.

Nel tuo caso hai bisogno di creare un gran numero di connessioni usando WinAPI e puoi controllare lo stato di queste connessioni attraverso WaitForMultipleObjects con un timeout, in modo da non mantenere un thread timer, per esempio.

PS. Teoricamente, si potrebbe usare anche IOCompletionPort, ma richiede più conoscenza e un'attenta progettazione.
 
Andrey Pogoreltsev:

Multithreading - i compiti vengono eseguiti in più thread. Può essere eseguito su un singolo processore, sempre in multithreading e passando da uno all'altro quando le quote di tempo del processore si esauriscono. Richiede la sincronizzazione per l'accesso alle risorse condivise. Può portare a deadlock, condizioni di gara, errori di rilascio della memoria e altre "sorprese".

È davvero così pericoloso? Errori nel rilascio della memoria... Tuttavia, gli Expert Advisors girano su diversi grafici in diversi thread e non ci sono fallimenti inaspettati. Quindi, i compiti distribuiti tra gli EA non causeranno errori critici, ma i compiti distribuiti tra i thread all'interno di un EA sì? Naturalmente, non sono un esperto in queste questioni, ma qual è il problema di spostare il metodo di distribuzione dei compiti tra gli EA in un unico EA? Forse c'è un problema, non lo discuto.

 
Andrey Pogoreltsev:

Multithreading - i compiti vengono eseguiti in più thread. Può essere eseguito su un singolo processore, sempre in multithreading e passando da uno all'altro quando le quote di tempo del processore si esauriscono. Richiede la sincronizzazione per l'accesso alle risorse condivise. Può portare a deadlock, condizioni di gara, bug di rilascio della memoria e altre "sorprese".

Asincrono - esecuzione di funzioni non bloccate (cioè il controllo viene restituito immediatamente dopo l'uscita del metodo), di solito su altri dispositivi (apparecchiature di rete, dispositivi di archiviazione, periferiche, ecc. Per esempio, è possibile scrivere un server multiutente ad alte prestazioni utilizzando solo un thread e connessioni client di elaborazione della macchina finale. Tutto dipende dallo scopo di questo server.

Nel tuo caso, hai bisogno di creare un gran numero di connessioni usando WinAPI e puoi controllare lo stato di queste connessioni con WaitForMultipleObjects con un timeout, quindi non devi tenere un thread timer, per esempio.

PS. Teoricamente, si potrebbe anche usare IOCompletionPort, ma richiede più conoscenza e un design chiaro.

Ora, questo è un discorso, ho fatto un'esecuzione non bloccata con asyncio, ma se scrivi la parola coroutine o calback qui, c'è molta confusione e preferirei non dire nulla ))
Io stesso conosco il principio delle chiamate non bloccanti, ma solo in python e in un'altra libreria C e C++.
Non ho mai lavorato con WinAPI, lo studierò, stavo guardando altre librerie, ma non fa differenza, la cosa principale è capire la sintassi, e ho capito cosa c'è )))
Ma durante la conversazione ho suggerito di aggiungere tale funzionalità al normale mql, per consentire la scrittura di codice asincrono fuori dalla scatola.
E abbiamo iniziato a fare confusione perché non capivamo per cosa e perché. Perché è perché ))