MQLによる非同期・マルチスレッドプログラミング - ページ 8

 
Dmitry Fedoseev:

非同期とマルチスレッドの特別な違いは、一部の人を悩ませるポインタと参照の違いの問題と同じところからきているようです。

非同期は別のスレッドで実装され、このプロセスがプロセッサや他のデバイスによって提供されているかどうかはあまり重要ではありません。プロセスの作成は、並列に存在するため、非同期であることを意味します。

非同期は、同じプログラムの実行 スレッドで、EventLoopによって実装されますが、EventLoopをどのように実装するかは、開発者の特権です。
mqlの標準的なハンドラは同じで、例えばOnTimerは独自のループで動作し、これはEventLoopの一種である。
非同期メソッド用に別のハンドラを作成する場合、すべてのタスクは完全に非同期ループで実行されます。

 
Roman:

非同期はEventLoopによって同じプログラムの実行 スレッドに実装されますが、EventLoopをどのように実装するかは、開発者の特権です。
mqlの標準的なハンドラは同じで、例えばOnTimerはそれ自身のループで動作しますが、これは一種のEventLoopと言えます。
非同期メソッド用に別のハンドラを作成する場合、すべてのタスクは完全に非同期ループで実行されます。

すみません、EventLoopで非同期が実装されているのはどこですか?

EventLoopのようなものはもう自分でできますから、端末の開発者はここでは全く必要ありません。

 
Dmitry Fedoseev:

すみません、EventLoopで非同期が実装されているのはどこですか?

EventLoopのようなものはもう自分でできますから、端末の開発者はここでは全く必要ありません。

EventLoopはasyncioで実装されていますが、他の非同期ライブラリでも同じような原理で実装されていると思います。
WinAPIでも、私の理解では、非同期はイベントの原理を利用しています。
現在のところ、標準的なツールで本格的な非同期モードを実装することはできません。
これは、例えばOnTimerハンドラでは、タスクの実行を制御せず、ループを順次実行するためである。
つまり、ハンドラには、非同期タスク実行の仕組みがない。

 

デッドロックの概念でみんなググれ!

MQL5では、スレッドを追加するとテストシステムが壊れ、エージェントクラウド全体がクラッシュしてしまいます。

この制限を回避するために、DLLを使用することが可能です。もしあなたがC#、C++、C、Pythonを学びたくないのなら、それはあなたの問題です。現代では、プログラマーは複数の言語を知っていなければ、特定のタスクに対応するツールを正しく選択することはできません。

1Cを知っている人はプログラマとはみなされない。MQL5も同様です。

 
Roffild:

デッドロックの概念でみんなググれ!

MQL5では、スレッドを追加するとテストシステムが壊れ、エージェントクラウド全体がクラッシュしてしまいます。

この制限を回避するために、DLLを使用することが可能です。もしあなたがC#、C++、C、Pythonを学びたくないのなら、それはあなたの問題です。現代では、プログラマーは複数の言語を知っていなければ、特定のタスクに対応するツールを正しく選択することはできません。

1Cを知っている人はプログラマとはみなされない。MQL5も同様です。

マルチスレッドのMQLプログラムがテストシステムを壊すのであれば、DLLを介して添付されているか、通常のものであるか、どのような違いがあるのでしょうか?いずれにせよ、テストとマルチスレッドのどちらかを選択する必要があります。でも、MQLの中で選んだ方が、整合性が取れているので、プログラムとしてはプラスになりますね。
 
Roffild:

デッドロックの概念でみんなググれ!

MQL5では、スレッドを追加するとテストシステムが壊れ、エージェントクラウド全体がクラッシュしてしまいます。

この制限を回避するために、DLLを使用することが可能です。もしあなたがC#、C++、C、Pythonを学びたくないのなら、それはあなたの問題です。現代では、プログラマーは複数の言語を知っていなければ、特定のタスクに対応するツールを正しく選択することはできません。

1Cを知っている人はプログラマとはみなされない。MQL5も同様です。

テスト中は、すべてのタスクを1つずつ解決し、ある瞬間に結果を返すことができます(テスターで待つことができます)。出来るだけでなく、現実に対応するようにしなければなりません。

1Cプログラマーはどう思ってるんだろう?他人の意見に興味があるのだろうか?

 
Реter Konow:
マルチスレッドのMQLプログラムがテストシステムを壊すのであれば、DLLを介して添付されているのか、通常のものなのか、どんな違いがあるのでしょうか?いずれにせよ、テストとマルチスレッドのどちらかを選択する必要があります。でも、MQLの中で選んだ方が、整合性が取れているので、プログラムとしてはプラスになりますね。
一般に、通常モードではマルチスレッドが必要です。テストは常に1つの小さなプログラムモジュール、つまりストラテジーで動作し、プログラムの他の機能はすべて休息を持っています。可視化など。そのため、テスト中はstrategyモジュールが配置されているスレッドのみが実行されることになります。テスターでは、一部の通常機能やイベントが無効になっているので、スレッドも無効にしておきましょう。
 
Реter Konow:
マルチスレッドのMQLプログラムがテストシステムを壊す場合、DLL経由でリンクされているか、直接リンクされているか、どのような違いがあるのでしょうか?いずれにせよ、テストとマルチスレッドのどちらかを選択する必要があります。でも、MQLの中で選んだ方が、整合性が取れているので、プログラムとしてはプラスになりますね。

違いがあるんです。クラウドではDLLは使用できません。そして、DLL自体も最初から無効化されています。DLLに対するパーミッションを有効にすることは、安全なコード実行の責任を放棄することになります。

 
Roman:

EventLoopはasyncioで実装されていますが、他の非同期ライブラリでも同じような原理で実装されていると思います。
...

他の非同期ライブラリはこの原則を採用していません。

 
Dmitry Fedoseev:

他の非同期ライブラリはこの原則を採用していません。

これはあくまで推測であり、他にどこで使われているかは調べていません。
EventLoopを使っている言語をググってみると、Py、JS、Qt、おそらくもっとあるようです。
ポイントは、どこに適用するかではなく、糸を使わない技術そのものにあります。
そこで、その技術を拝借して、mqlにイベントループを実装してみませんか?