Errores, fallos, preguntas - página 2780

 
Sergey Dzyublik:

Pasos para jugar:

Es imposible no dar las gracias por un trabajo así. Esperemos que en otros bichos tengamos algo similar algún día.

 
Sergey Dzyublik:

No llores, hace mucho tiempo que no te contesto:

Desgraciadamente, la salida resultó ser no sólo cero, sino negativa...

Bueno, por qué negativo...
No lo conseguí la primera vez, no lo conseguí la segunda vez, pero lo conseguí la tercera vez.
No puedo evitar ser tan espeso. No es tu culpa.
Así que no te ofendas, Sergei.

 
Sergey Dzyublik:

Tienes un malentendido de los términos asíncrono y síncrono.
Cuando se dice que una función es asíncrona, significa que se ejecutará no en el hilo de ejecución actual, sino en algún otro hilo.

Llamar a una función asíncrona como ChartSetInteger desde el hilo principal es rápido ya que la ejecución real ocurre en un hilo diferente.
Por otro lado, una llamada de una función sincrónica ChartGetInteger requerirá la sincronización de los hilos y esto puede requerir tiempo adicional.
Los retrasos son especialmente notables cuando el hilo paralelo está actualizando constantemente los datos de la estructura del gráfico (por ejemplo, cuando el usuario mueve la ventana del gráfico o se desplaza por el historial).
Lo más probable es que, por simplicidad y fiabilidad, se utilice un único objeto de sincronización para su estructura de datos del gráfico.
Puedes intentar mejorar la velocidad de ejecución utilizando la "segmentación de datos", pero por otro lado ahora puedes encontrarte con bloqueos, o datos poco actualizados, o ralentizaciones en otros lugares más críticos.
En general, es mejor no tocar algo que ya funciona de forma estable.

Alain Verleyen:

No. Los métodos Get son sincrónicos, pero pueden agruparse y ejecutarse simultáneamente, por lo que la llamada al método 1 Get o 100 es casi idéntica.

Los métodos de conjunto son asíncronos, pero también pueden agruparse para una mayor eficiencia.

Por lo tanto, siempre es mejor agrupar las "llamadas Set" y las "llamadas Get" en lugar de "Get / set / get / set / get / set".

Las llamadas asíncronas son más eficientes si el hilo que llama no está bloqueado mientras se ejecuta la función, pero perderá estos beneficios si mezcla Get y Set.

Espero que esto ayude, a pesar de la traducción.

Aleksey Mavrin:

Según tengo entendido - Get es sincrónico, ya que devuelven el resultado solicitado. Pero si tienes un conjunto asíncrono en la cola, tienes que sincronizar con ellos.

Si sólo hay Get en la cola, no hay retraso.

Gracias a todos. Poco a poco empiezo a cogerle el tranquillo.

Ahora se aclara el verdadero panorama de estos retrasos.

Según tengo entendido (corregidme, por favor, si me equivoco):

Cuando se llama al método Get desde el hilo principal, hay una petición al propio hilo del gráfico, que se ejecuta en paralelo al hilo principal. Pero el hilo principal es controlado directamente desde el hilo principal por los métodos Set y el hilo principal ya debería conocer el estado actual del hilo del gráfico, pero simplemente no conoce el estado actual del hilo del gráfico y no está seguro de si se han ejecutado los últimos comandos. Por eso se produce esta petición, para asegurarse de que todos los comandos anteriores se han ejecutado. Dado que el método Get es sincrónico, espera hasta que se reciba una respuesta del hilo gráfico paralelo. Este es el motivo de los retrasos.

Si no me he equivocado, se plantea una pregunta:

¿Por qué no puede el hilo principal informar al hilo que se ejecuta su comando, para que el hilo principal pueda marcar el comando como ejecutado y actualizar su tabla interna de gráficos? Entonces el hilo principal devolvería los datos de la tabla sin hacer peticiones al hilo principal. Además, podría pasar una bandera que diga que hay comandos que aún no se han ejecutado al hilo paralelo o que se han ejecutado todos los comandos para entender el estado actual del gráfico. No habrá retrasos con este plan.

He implementado aproximadamente un mecanismo similar en la clase iCanvas.

Aquí hay un indicador, demostrando este mecanismo, donde hay una función increíblemente lenta ChartXYToTimePrice para asociar las coordenadas de los píxeles con el tiempo y el precio del gráfico y su análogo es la función XYToTimePrice, que actualiza sus variables estáticas internas cuando se produce el evento CHARTEVENT_CHART_CHANGE y calcula los parámetros solicitados basándose en los datos de este gráfico estático de parámetros del gráfico.



Archivos adjuntos:
TestSpeedXY.mq5  16 kb
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL5 MT5 MetaTrader 5".
 
Nikolai Semko :

Gracias a todos. Poco a poco empiezo a cogerle el tranquillo.

...
Esto es correcto. Y como dijo Renat, el sistema de caché tiene que ser implementado en el lado de mql. Tal vez podría implementarse en el lado de la plataforma, pero eso comprometería el logro de una arquitectura multihilo lo más performante posible.
 
Alain Verleyen:
Esto es cierto. Y, como dijo Renat, el sistema de caché tiene que ser implementado en el lado de mql. Tal vez podría implementarse en el lado de la plataforma, pero eso comprometería la consecución de una arquitectura multihilo lo más productiva posible.

Ya veo.
Tanto mejor para los que entienden cómo aplicar este sistema de caché, y peor para los que no lo hacen.

 
Nikolai Semko:

Intentaré usar una analogía, si no funciona así, que así sea.
Todo es muy exagerado y no es cierto, pero aun así.


Está usted, el cliente, que determina y lleva las pinturas al artista, y está el artista, que utiliza las pinturas que usted trae y pinta en el lienzo con ellas.
Después de traer las pinturas, eres libre de ir a tus asuntos: trabajo, casa, escuela, .....
También puede visitar al pintor en cualquier momento e inspeccionar el resultado.
Sin embargo, si viene a hacer una inspección y el artista está pintando, tendrá que esperar hasta que el artista termine su trabajo.


La mejor manera de interactuar es llevarle al pintor todas las pinturas que necesita, ordenarle que pinte y luego dedicarse a sus asuntos.
Al final, si es necesario, puede visitar al pintor para que lo inspeccione tantas veces como sea necesario para acceder a los lienzos.

La forma más subóptima de interactuar es llevar al pintor una pintura cada vez y exigir el resultado de inmediato, esperando a que el pintor termine su trabajo cada vez.

¿Cuál es el problema en 2485 en comparación con la construcción de 2009:
Artista se trasladó más cerca de usted, el tiempo de viaje para la inspección comenzó a pasar menos, que es una ventaja.
Sin embargo, el artista ha empezado a dedicar mucho tiempo a trabajos "a tiempo parcial".
Antes aceptaba "trabajos a tiempo parcial" con la misma frecuencia, pero ahora hay que esperar demasiado para que el artista termine la obra.

 
Nikolai Semko :

Ya veo.
Mejor para los que entienden cómo aplicar este sistema de caché, y peor para los que no lo hacen.

A la derecha
 
Sergey Dzyublik:


La mejor manera de interactuar es llevar al pintor todas las pinturas que necesita, ordenarle que pinte y luego seguir con sus asuntos.
Al final, si es necesario, puedes visitar al pintor para una inspección tantas veces como quieras - tendrás libre acceso al lienzo.

En mi opinión, la mejor manera es acordar con el artista que, en cuanto termine algún cuadro, indicará en su página web una determinada obra terminada que esté disponible para su visualización, y también acordar que indicará su estado actual: si está haciendo trabajos a tiempo parcial o libres.
Así sabrás qué cuadro está listo y cuál no sin necesidad de visitar al artista y si éste está ocupado o libre en ese momento, puedes enviarle el siguiente trabajo. Y no habrá necesidad de viajar en vano con una inspección. Ahorrará tiempo y nervios tanto al cliente como al artista.

 
Nikolai Semko:

1) En mi opinión, la mejor manera es ponerse de acuerdo con el artista,
2) tan pronto como termine alguna pintura regular,
3) a continuación, señaló inmediatamente a un trabajo específico realizado en su sitio, que está disponible para su visualización por el cliente,
4), así como de acuerdo para especificar en el sitio de su estado actual - está ocupado pluriempleo o libre.
5) Entonces el cliente sabrá .... Si el artista está actualmente ocupado o libre y puedes enviarle el siguiente trabajo.
6) Y no habrá necesidad de viajar en vano con la inspección. Ahorrará tiempo y nervios tanto al cliente como al artista.

1) El artista no conoce tus planes y tú tampoco conoces el futuro...
2) No hay cuadros, hay un lienzo en el que van todas las manipulaciones y "retoques".
3) Introducir en una analogía procesos no relacionados con el material de partida es no entender qué es y para qué sirve una analogía.
4) Un pintor no conoce el futuro y si tiene que venir a una inspección, su estado puede cambiar cien veces durante el viaje.
5) Se puede llevar pintura en cualquier momento, siempre se tarda lo mismo independientemente de la situación del artista o de su empleo.
6) De nuevo no entender la esencia de lo que es una analogía y para qué sirve...