Una vez más, sobre el multihilo

 
Estimados desarrolladores, he buscado sobre el tema del multithreading y he encontrado la frase que decíais que no ibais a añadir funciones de creación y gestión de hilos a MQL5. Se dijo hace más de un año y medio. Me pregunto si sus opiniones han cambiado desde entonces.
Si aún así no quiere molestarse en ello, ¿por qué no deja que los usuarios lo apliquen ellos mismos? Para ello necesitamos un puntero de función. ¿Qué tal si se añade esta función? Es decir, GetPointer(myfunc)

Además, si no es difícil explicar por qué no implementó el multihilo en MQL5, ¿por qué vio alguna dificultad en particular? ¿O tal vez era sólo una cuestión de principios?
Les recuerdo que ya no estamos en el año 2000 y que los procesadores multinúcleo hace tiempo que se han convertido en la norma para todos, el número de núcleos no hará más que aumentar cada año. Ahora son 4, en un par de años serán 6-8, etc. Y no permite a los usuarios utilizar correctamente el procesador con el programa que están ejecutando.
¿Qué sentido tienen entonces tus constantes comparaciones de velocidad entre MQL y C++, si sólo estás comparando el trabajo en un hilo? Después de todo, ningún programador razonable de C++ colgaría una tarea que consume muchos recursos de un hilo cuando hay varios procesadores que pueden aumentar el rendimiento muchas veces. Por eso todas sus pruebas tienen poca relación con la vida real. ¿Dentro de unos años el núcleo del procesador crecerá hasta los 10 núcleos y usted seguirá estando orgulloso de sus pruebas MQL de un solo hilo?

En cuanto al uso de OpenCL, es un chamanismo, especialmente en la forma en que se implementa aquí - a través de la línea de texto. Es decir, depuras el código en otro lugar, y luego lo copias en MQL5... ¡Qué circo! Entonces sería más fácil implementar todo esto en una DLL e importarla. Además, muy poca gente querría escribir un programa en varios idiomas.
OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 
meat:
Estimados desarrolladores, he buscado sobre el tema del multithreading y he encontrado una frase en la que decían que no iban a añadir funciones de creación y gestión de hilos en MQL5. Se dijo hace más de un año y medio. Me pregunto si sus opiniones han cambiado desde entonces.
Si aún así no quiere molestarse en ello, ¿por qué no deja que los usuarios lo implementen ellos mismos? Para ello necesitamos un puntero de función. ¿Qué tal si se añade esta función? Es decir, GetPointer(myfunc)

Y también, si no es difícil explicar por qué no implementó el multihilo en MQL5, ¿dónde vio dificultades específicas? ¿O tal vez era sólo una cuestión de principios?
Les recuerdo que ya no estamos en el año 2000 y que los procesadores multinúcleo hace tiempo que se han convertido en la norma para todos, el número de núcleos no hará más que aumentar cada año. Ahora son 4, en un par de años serán 6-8, etc. Y no permite a los usuarios utilizar correctamente el procesador con el programa que están ejecutando.
¿Qué sentido tienen entonces tus constantes comparaciones de velocidad entre MQL y C++ si sólo comparas el trabajo en un hilo? Después de todo, ningún programador razonable de C++ colgaría una tarea que consume muchos recursos de un hilo cuando hay varios procesadores que pueden aumentar el rendimiento muchas veces. Por eso todas sus pruebas tienen poca relación con la vida real. ¿Dentro de unos años el núcleo del procesador crecerá hasta los 10 núcleos y usted seguirá estando orgulloso de sus pruebas MQL de un solo hilo?

En cuanto al uso de OpenCL, es un chamanismo, especialmente en la forma en que se implementa aquí - a través de la línea de texto. Así que depuras tu código en otro lugar, y luego lo copias en MQL5... ¡Qué circo! Entonces sería más fácil implementar todo esto en una DLL e importarla. Además, muy poca gente querría escribir un programa en varios idiomas.

El multithreading en MQL5 sigue estando disponible, pero a diferencia de C++, se implementa como un entorno de ejecución virtual llamado gráfico.

Cada gráfico se ejecuta en un hilo independiente. Esto se hace para evitar la molesta sincronización de los hilos, el acceso a los datos y otros problemas que surgen durante la comunicación entre hilos.

¿Muy feo? Sí, pero para el usuario masivo (que ya se queja de la complejidad del lenguaje) es lo justo.

En cuanto a la OpenCL, es un tema aparte. Ni siquiera estaba en los planes de desarrollo de la plataforma. Al principio, los usuarios avanzados del foro atrajeron el interés de los desarrolladores sobre este tema, pero la respuesta oficial fue "no y no será". Pero entonces la dirección de MQ ha cambiado su ira por la piedad(gracias Ilyaz).

Sobre las Dll: MQ las considera potencialmente peligrosas, por lo que siempre que es posible para evitarlas tratan de implementarlas, especialmente para los servicios públicos. Pero no los prohíbe en general, porque los programadores no sólo escriben para el público, sino también para la interwebs.

 

En definitiva, parecen puras afirmaciones teóricas.

No hay nada malo con el multithreading y el uso completo de los procesadores en el terminal. Mira cuántos hilos se están ejecutando en el terminal y cómo cambia el número de hilos en el tiempo. Los principios del multihilo se han explicado y demostrado muchas veces. Por ejemplo, cómo funcionan los hilos independientes de recálculo de indicadores, recálculo de símbolos, paginación de datos del gráfico y funcionamiento independiente de todos los Asesores Expertos y scripts.

Para paralelizar los cálculos de cualquier cosa, primero hay que darse cuenta de que sólo una pequeña parte de las matemáticas puede ser paralela.

Mira el probador multinúcleo, MQL5 Cloud Network y OpenCL. Llevamos mucho tiempo a la cabeza, sobre todo en la computación en nube. Ahora mismo, active la red MQL5 Cloud Network en su probador y obtenga hasta 14.000 CPUs para ayudarle:

Parece que tampoco sabes nada de OpenCL. Presentar el código del programa en forma de fuente para enviarlo al compilador de OpenCL es la forma habitual y estándar de trabajar. Ten en cuenta que los diferentes manejadores de OpenCL (Ndivia, AMD, Intel, etc.) tienen que obtener el código y reelaborarlo para ellos mismos.

Статистика - MQL5 Cloud Network
Статистика - MQL5 Cloud Network
  • cloud.mql5.com
Произведенный объем работы, распределение агентов по странам, RAM, CPU и битности OS
 

Qué es el multithreading en MetaTrader 5:

Acabo de hacer clic en la prueba, al instante conseguí que funcionaran 5.743 agentes/CPU y ejecuté 381.468 pases en el optimizador en 6 minutos. Cada pase tardaba entre 1 y 2 segundos en ejecutarse. Si realizara la prueba en mi ordenador con 8 núcleos, habría empleado entre 800 y 1600 minutos en lugar de 6 minutos (381468 / 8 = 47683 segundos = 794 minutos).

Y aparte de pulsar el botón de inicio, no tuve que hacer nada más. Algún skynet se levantó, sincronizó por sí mismo todo el historial gráfico necesario, distribuyó la tarea a miles de ordenadores de todo el mundo y los hizo trabajar en masa.

Bienvenido a la realidad...

 

Renat,

pregunta sobre la creación de hilos dentro de MQL5 Expert Advisor.

 
sergeev:

Renate,

La pregunta sobre la creación de hilos dentro de MQL5 Expert Advisor.

Soy consciente de ello.

Simplemente no escribí que es mejor no hablar de multithreading a una persona que no entiende por qué no hay multithreading en un lenguaje computacional aplicado. Hemos implementado toda la infraestructura multihilo del terminal de forma completa y eficaz.

El verdadero multithreading es necesario en los lugares donde realmente se pueden paralelizar las tareas. Esto es un probador. Y aquí es donde lo hemos implementado de tal manera que mucha gente está lejos de entender la calidad, el control y el volumen del trabajo realizado.

Mi ejemplo con claude es una simple prueba de la calidad y el nivel de elaboración de la tarea.

 

Sí, Renat, no has leído bien mi post. No estamos hablando de multithreading de MT5, sino de multithreading de MQL5. No podemos crear estos hilos en un programa en ejecución por nosotros mismos. La apertura del programa de un nuevo gráfico con un indicador es un baile de pandereta, no una solución.

Es increíble, han hecho un montón de cosas innecesarias en MQL5, teniendo en cuenta un usuario masivo. Y por lo que a mí respecta, se centra principalmente en los tontos, no en los programadores alfabetizados. De ahí el cúmulo de restricciones, la imposibilidad de trabajar con la memoria directamente, etc. Así que la pregunta es, ¿por qué los tontos necesitan, por ejemplo, clases?

Si posicionas tu producto no sólo para dummies, ¿por qué no puedes dar a los programadores experimentados la oportunidad de utilizar eficazmente los recursos del sistema?

La falta de multihilo no se compensará con ninguna clase. Por muy inteligente que parezca un programa, si utiliza los recursos del sistema de forma ineficiente, es una vergüenza para todos. Tal vez usted, en su afán de innovación, haya olvidado que el lenguaje MQL está pensado principalmente para escribir programas de trading y análisis, y no para programar por programar. Por lo tanto, la velocidad y la eficacia del programa, más que la velocidad de escritura del código, deben ser la primera prioridad. Porque el trabajo con datos de gran tamaño se espera a priori.

Creo que las capacidades de MQL4 serán suficientes para la mayoría de los usuarios. Lo único que faltaba era el soporte de estructuras, punteros a variables y punteros a funciones (o soporte incorporado de funciones de devolución de llamadas). Y eso es todo. Con este arsenal, puedes crear cualquier programa que funcione de forma muy eficaz, crear el número necesario de hilos, callbacks, etc.

 

carne, sin ofender, pero con este nivel de comprensión de los temas en el jardín de infancia.

He leído todo con atención, pero no tengo la posibilidad de dar una formación completa. Tengo 11 años de experiencia en los lenguajes MQL/MQL2/MQL4/MQL5.

 
meat:

No se trata en absoluto del multithreading de MT5, sino del multithreading de MQL5. No podemos crear estos hilos en el programa en ejecución por nosotros mismos. Y la apertura por software de un nuevo gráfico con un indicador es, estarás de acuerdo, un baile de pandereta, no una solución.

VinAPI es una ayuda. No es necesario el multithreading en MQL5. Es decir, no es necesario en absoluto.
 
meat:


Lo más sorprendente es que haya hecho tantas cosas innecesarias en MQL5, si tenemos en cuenta un usuario masivo.

Si se toma un solo usuario, puede haber muchas cosas innecesarias. Y cuando se empiezan a ampliar los horizontes y se requieren características adicionales, resulta que, por el contrario, algo ya está ahí, mientras que algo falta.

MQL5 está todavía en desarrollo. Poco a poco se va añadiendo algo nuevo. Aunque, por supuesto, también hay desventajas, por ejemplo, no puedes crear tus propios eventos, no hay manejadores de excepción y multihilo. Espero que todo esto salga a la luz algún día... Pero dudo que todo se aplique mañana.

Si uno realmente quiere, el multihilo está disponible para probar los agentes en OpenCL también. No es del todo conveniente, pero aún así está ahí y puedes paralelizar tareas.

 
Renat:

carne, sin ofender, pero con este nivel de comprensión de los temas en el jardín de infancia.

Y dices que no es la norma corporativa))

Si se hacen preguntas, significa que las respuestas no están en la superficie...