错误、漏洞、问题 - 页 2780

 
Sergey Dzyublik:

玩的步骤。

对于这样的工作,不说谢谢是不可能的。希望在其他虫子上,我们有一天会得到类似的东西。

 
Sergey Dzyublik:

别哭,我已经很久没有回答了

不幸的是,输出结果不仅是零,而且是负的......。

好吧,为什么消极......
,我第一次没有得到它,第二次没有得到它,但我第三次得到它。
如果我这么厚道,我也没办法。这不是你的错。
所以,不要被冒犯,谢尔盖。

 
Sergey Dzyublik:

你对异步和同步这两个术语有一些误解。
当你说一个函数是异步的,这意味着它将不在当前的执行线程中执行,而是在其他线程中执行。

从主线程调用一个异步的作为ChartSetInteger的函数是快速的,因为实际执行发生在不同的线程。
另一方面,调用ChartGetInteger的同步函数将需要线程的同步,这可能需要额外的时间。
当并行线程不断地更新图表结构数据时(例如,当用户移动图表窗口或滚动浏览历史记录时),延迟就特别明显。
最有可能的是,为了简单和可靠,其图表数据结构使用了一个单一的同步对象。
你可以尝试使用 "数据分段 "来提高执行速度,但另一方面,现在你可能会遇到死锁,或更新不足的数据,或在其他更关键的领域出现减速。
一般来说,最好不要碰已经稳定运行的东西。

Alain Verleyen:

不,获取方法是同步的,但它们可以被分组并同时执行,所以对方法1获取或100的调用几乎是相同的。

集合方法是异步的,但它们也可以被分组以提高效率。

因此,将 "Set调用在一起 "和 "Get调用在一起 "分组,总是比 "Get / set / get / set / get / set "要好。

如果调用线程在函数运行时没有被阻塞,异步调用会更有效率,但如果你混合使用Get和Set,你将失去这些好处。

我希望这对你有帮助,尽管是翻译。

Aleksey Mavrin:

按照我的理解--Get是同步的,因为它们会返回请求的结果。但如果你在队列中有异步的Set,你必须与它们同步。

如果队列中只有Get,就不会有延迟。

谢谢大家。我正慢慢开始掌握它的窍门。

现在,这种延误的真实情况变得清晰了。

按照我的理解(如果我错了,请纠正我)。

当从主线程调用Get方法时,有一个对图表线程本身的请求,它与主线程平行运行。但主线程是由Set方法直接控制的,主线程应该已经知道图表线程的当前状态,但它就是不知道图表线程的当前状态,不确定最后的命令是否已经执行。这就是为什么会发生这个请求,以确保之前的所有命令都被执行。由于Get方法是同步的,它一直等待,直到收到来自并行图表线程的响应。这就是延误的原因。

如果我没有犯错,就会出现一个问题。

为什么主线程不能向线程报告其命令已被执行,这样主线程就可以将命令标记为已执行,并更新其内部的图表表?然后,主线程将从表中获得数据,而不需要向主线程询问表中的数据。此外,你可以传递一个标志,说有一些命令还没有执行,或者所有的命令都已经执行,以了解图表的当前状态。这个计划不会有任何延误。

我已经在iCanvas类中实现了大约类似的机制。

这里有一个指标,演示了这种机制,其中有一个慢得令人难以置信的函数ChartXYToTimePrice,将像素坐标与图表时间和价格联系起来,并创建其类似物,即XYToTimePrice函数,该函数在CHARTEVENT_CHART_CHANGE事件中更新其内部静态变量,并根据这个静态图表参数的数据计算出所要求的参数。



附加的文件:
TestSpeedXY.mq5  16 kb
 
与本主题无关的评论已被移至"来自MQL5 MT5 MetaTrader 5初学者的问题"。
 
Nikolai Semko :

谢谢大家。我正慢慢开始掌握它的窍门。

...
这一点是正确的。而且正如Renat所说,缓存系统需要在mql端实现。也许它可以在平台上实现,但这将影响到实现尽可能高性能的多线程 架构。
 
Alain Verleyen:
这是真的。而且,正如Renat所说,缓存系统需要在mql端实现。也许它可以在平台方面实现,但这将影响到实现最富有成效的多线程 架构。

我明白了。
对于那些了解如何实施这种缓存系统的人来说,这一切都很好,而对于那些不了解的人来说,则更糟糕。

 
Nikolai Semko:

我试着用一个比喻,如果不这样做,那就这样吧。
这都是非常夸张的,不是真的,但仍然是。


有你,顾客,决定并把颜料带给艺术家,有艺术家,使用你带来的颜料,用它们在画布上作画。
在你带来颜料之后,你可以自由地去做你的事情:工作、家庭、学校、.....
你也可以在任何时候访问画家并检查结果。
但是,如果你来检查,而艺术家正在作画,你就必须等待,直到艺术家完成他的工作。


最好的互动方式是给画家带来他所需要的所有颜料,命令他作画,然后去做你的生意。
最后,如果有必要,你可以根据需要多次到画家那里进行检查,以获取画布。

最次的互动方式是每次给画家带来一个颜料,然后马上要求得到结果,每次都要等画家完成工作。

与2009年的建设相比,2485年的问题是什么:
艺术家搬到离你更近的地方,检查的旅行时间开始花费更少,这是一个优点。
然而,这位艺术家已经开始花大量时间从事 "兼职 "工作。
他曾经以同样的频率接过 "兼职",但现在你必须等待太长时间才能让艺术家完成工作。

 
Nikolai Semko :

我明白了。
对于那些了解如何实施这种缓存系统的人来说,这一切都很好,而对于那些不了解的人来说,则更糟糕。

 
Sergey Dzyublik:


最好的互动方式是把你需要的所有颜料带给画家,命令他作画,然后去做你的事。
最后,如果有必要,你可以随心所欲地访问画家进行检查--你将可以自由地接触画布。

在我看来,最好的办法是与艺术家达成协议,一旦他完成了一些画作,他将在他的网站上注明某件已完成的作品,供人欣赏,同时同意他注明他目前的状态--他是在做兼职工作还是免费的。
然后你就会知道哪张照片已经准备好了,哪张没有准备好,不用去拜访艺术家,如果艺术家现在很忙或有空,你可以把下一个工作交给他。也就没有必要在检查中白跑一趟了。这将为客户和艺术家节省时间和神经。

 
Nikolai Semko:

1)在我看来,最好的办法是与艺术家约定,
2)只要他完成一些常规的绘画,
3)然后他立即指出在其网站上完成的具体作品,可供客户查看,
4)以及同意在网站上注明其目前的状态--它是忙于兼职还是免费。
5) 然后客户会知道....如果艺术家目前很忙或有空,你可以把下一个工作发给他。
6)也就不需要在检查中徒劳无功了。这将为客户和艺术家节省时间和神经。

1)艺术家不知道你的计划,你也不知道未来......
2)没有画,只有一块画布,所有的操作和 "修补 "都在上面进行。
3)将与源材料无关的过程引入类比,就是不理解类比是什么,是为了什么。
4) 画家不知道未来,如果你需要来检查,他的状态可能在旅途中改变一百次。
5)你可以在任何时候把颜料送来,无论艺术家的身份或他们的工作情况如何,总是需要同样的时间。
6)再次不理解什么是类比的本质,以及类比的作用......