再一次,关于多线程

 
亲爱的开发者,我在多线程的主题上搜索,发现你们说不打算在MQL5中添加线程创建和管理的功能。这句话是一年半前说的。我想知道从那时起你的观点是否有所改变?
如果你还是不想管它,为什么不让用户自己实施呢? 为此,我们需要一个函数指针。增加这样的功能如何?即GetPointer(myfunc)。

另外,如果你想解释一下为什么你没有在MQL5中实现多线程。 为什么你认为有什么特别的困难? 或者说,这只是一个原则问题?
请允许我提醒你,现在已经不是2000年了,多核处理器早已成为所有人的标准,内核的数量只会逐年增加。现在是4个,几年后将是6-8个,等等。 而且你不允许用户正确使用他们正在执行的程序的处理器。
那么,如果你只在一个线程中比较工作,你在MQL和C++之间不断进行速度比较的意义何在?毕竟,当有几个处理器可以提高很多倍的性能时,没有一个合理的C++程序员会在一个线程上挂一个资源密集型的任务。这就是为什么你所有的测试与现实生活没有什么关系。几年后,处理器核心将增长到10个核心,你还会为你的单线程MQL测试感到骄傲吗?

至于使用OpenCL,那是萨满教,尤其是在这里实现的方式--通过文本线。所以你在其他地方调试你的代码,然后把它复制到MQL5中...好一个马戏团!这样,在一个DLL中实现所有这些并将其导入就会更容易。此外,很少有人会想用几种语言编写程序。
OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 
meat:
尊敬的开发者,我在多线程的主题上进行了搜索,发现了一句话,你说你不打算在MQL5中添加创建和管理线程的函数。这句话是一年半前说的。我想知道从那时起你的观点是否有所改变?
如果你还是不想管它,为什么不让用户自己实施呢? 为此,我们需要一个函数指针。增加这样的功能如何?即GetPointer(myfunc)。

另外,如果你想解释一下为什么你没有在MQL5中实现多线程。 为什么你认为有什么特别的困难? 或者说,这只是一个原则问题?
请允许我提醒你,现在已经不是2000年了,多核处理器早已成为所有人的标准,内核的数量只会逐年增加。现在是4个,几年后将是6-8个,等等。 而且你不允许用户正确使用他们正在执行的程序的处理器。
那么,如果你只在一个线程中比较工作,你在MQL和C++之间不断进行速度比较的意义何在?毕竟,当有几个处理器可以提高很多倍的性能时,没有一个合理的C++程序员会在一个线程上挂一个资源密集型的任务。这就是为什么你所有的测试与现实生活没有什么关系。几年后,处理器核心将增长到10个核心,你还会为你的单线程MQL测试感到骄傲吗?

至于使用OpenCL,那是萨满教,尤其是在这里实现的方式--通过文本线。所以你在其他地方调试你的代码,然后把它复制到MQL5中...好一个马戏团!这样,在一个DLL中实现所有这些并将其导入就会更容易。此外,很少有人会想用几种语言编写程序。

MQL5中的多线程仍然可用,但与C++不同的是,它被实现为一个称为图表的虚拟执行环境。

每个图表都在一个单独的线程中运行。 这样做是为了避免线程的同步、数据访问和其他在线程间通信过程中出现的麻烦。

是的,但对于大众用户(他们已经在抱怨语言的复杂性)来说,这恰恰是正确的事情。

就OpenCL而言,这是一个独立的问题。它甚至不在平台的开发计划中。一开始,高级论坛的用户在这个话题上吸引了开发者的兴趣,但官方的回应是 "没有也不会有"。但后来MQ的领导层已经改怒为喜(感谢伊利亚兹)。

关于Dll:MQ认为它们有潜在的危险性,所以只要有可能就会避免它们,特别是对于公共服务,他们会尽量实施。但一般来说,它并不禁止他们,因为程序员不仅为公众写作,也为对话者写作。

 

总而言之,这看起来是纯粹的理论陈述。

多线程和充分利用终端的处理器并没有错。看看终端有多少线程在运行,以及线程的数量在时间上的变化。多线程的原理已经被解释和演示过很多次。例如,指标重新计算的独立线程、符号重新计算、图表数据分页以及所有专家顾问和脚本的独立操作如何进行。

为了对任何事物进行并行计算,你首先应该意识到,只有数学的极小部分可以被并行化。

看看多核测试器、MQL5云计算网络和OpenCL。我们已经领先了很长时间,特别是在云计算方面。现在,在你的测试器中打开MQL5云网络,获得多达14,000个CPU来帮助你。

你似乎也不了解OpenCL的情况。将程序代码以源码的形式提交给OpenCL编译器是通常和标准的工作方式。请记住,不同的OpenCL处理程序(Ndivia、AMD、Intel等)必须获得代码并为自己重做。

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

什么是MetaTrader 5中的多线程。

刚刚点击测试,立即有5743个代理/CPU工作,并在6分钟内在优化器中执行了381,468次。每个通道的运行时间在1到2秒之间。如果我在有8个核心的电脑上进行测试,我将花费800到1600分钟,而不是6分钟(381468/8=47683秒=794分钟)。

除了按下启动按钮外,我不需要做任何其他事情。一些天网起来了,自行同步所有需要的图表历史,将任务分配给世界各地的数千台计算机,并让它们集体工作。

欢迎来到现实...

 

雷纳特。

关于在MQL5专家顾问内部创建线程的问题。

 
sergeev:

雷娜特。

关于在MQL5专家顾问内部创建线程的问题。

我很清楚这一点。

我只是没有写,最好不要对一个不明白为什么在应用计算语言 中没有多线程的人谈论多线程。我们以充分有效的方式实现了终端的整个基础设施多线程。

真正的多线程是需要在你能真正并行任务的地方进行的。这是一个测试器。而这是我们实施的地方,许多人对所做工作的质量、控制和数量的理解相去甚远。

我和克劳德的例子是任务质量和阐述水平的一个简单证明。

 

是的,雷纳特,你没有仔细阅读我的帖子。我们不是在谈论MT5的多线程,而是在谈论MQL5的多线程。我们不能自己在一个正在运行的程序中创建这些线程。用指标打开新图表的程序是一种手鼓舞,而不是一种解决方案。

令人惊讶的是,考虑到大众用户,你在MQL5中做了很多不必要的东西。而且就我而言,你主要关注的是傻瓜,而不是有文化的程序员。因此,有一大堆限制,不可能直接使用内存,等等。因此,问题是,为什么假人需要例如上课?

如果你对你的产品的定位不仅仅是傻瓜,为什么你不能给有经验的程序员一个有效利用系统资源的机会呢?

缺乏多线程的问题不会用任何类来弥补。无论一个程序看起来多么聪明,但如果它对系统资源的使用效率低下,对它来说都是一种耻辱。也许你在追求创新的过程中,忘记了MQL语言主要是用来编写交易和分析程序的,而不是为了编程而编程。因此,程序的速度和有效性,而不是编写代码的速度,应该是首要任务。因为大数据量的工作是事先预期的。

我认为MQL4的功能对大多数用户来说已经足够了。唯一缺少的是对结构、变量指针和函数指针的支持(或对回调函数的内置支持)。这就是全部。有了这个武器库,你可以创建任何工作非常有效的程序,创建所需数量的线程和回调,等等。

 

肉,没有冒犯的意思,但以这种对幼儿园问题 的理解程度。

我已经仔细阅读了所有内容,但我没有可能进行全面的教育。我有11年的MQL/MQL2/MQL4/MQL5语言的经验。

 
meat:

这根本不是关于MT5多线程,而是关于MQL5多线程。我们不能自己在运行的程序中创建这些线程。而软件打开一个带有指标的新图表,你会同意,这是一个手鼓舞,而不是一个解决方案。

VinAPI是一种帮助。你不需要MQL5中的多线程。也就是说,它根本没有必要。
 
meat:


令人惊讶的是,如果我们考虑到一个大众用户,你在MQL5中做了这么多不必要的东西。

如果你采取单一用户,可能会有很多不必要的东西。而当你开始拓宽视野,需要额外的功能时,结果发现,恰恰相反,有些东西已经在这里了,有些东西却没有。

MQL5仍在开发中。新的东西正在一点一点地被添加。当然,也有缺点,例如,你不能创建自己的事件,没有异常处理程序和多线程。我希望这一切有朝一日都能真相大白?但我怀疑这一切明天就会实施。

如果真的需要,多线程也可用于OpenCL中的测试代理。它并不完全方便,但它仍然存在,你可以将任务并行化

 
Renat:

肉,没有冒犯的意思,但以这种水平对幼儿园的问题 的理解。

而你说的不是企业标准))。

如果提出问题,这意味着答案不在表面上......