MQL의 비동기 및 다중 스레드 프로그래밍 - 페이지 13

 
Реter Konow :

이제 멀티스레딩을 추가하면 정말 나빠질까요? 그래서 그들은 MQL에 많은 것을 추가했고 이것은 정말 유용한 것입니다. 그러나 MQL로 매우 복잡하고 성가신 프로그램을 작성하는 사람만이 그 유용성을 이해할 수 있습니다. 멀티스레딩이 필요한 이유를 이해하지 못한다면 그러한 프로그램을 작성하지 마십시오. 쓰다보면 이해가 됩니다. 모든 것이 간단합니다. ))

멀티스레딩은 특히 테스터, 특히 멀티 도구 모드에서 반드시 필요합니다. 나는 종종 생산성이 부족합니다. 그러나 나는 프로그래밍 분야의 전문가가 아니며 미묘함을 정말로 이해하지 못합니다. 많은 것을 병렬로 계산해야한다는 것만 알고 있습니다. 그리고 테스터를 병렬화하는 것이 매우 유용할 것입니다.
 
Реter Konow :

이제 멀티스레딩을 추가하면 정말 나빠질까요?

확실히 아닙니다 - 더 좋을 것입니다! - 하지만 여기서 핵심 문제는 지원입니다. 누가 사용 방법을 설명할까요? 누가 버그를 고칠 것인가? - 누가 보장된 이해 가능한 기능을 제공할 것인가?

MT를 사용하는 방법과 대상 개발자의 주요 아이디어에 따르면 C ++에 해당하는 기능을 제공하여 학습의 "두통"을 완화하고 작동 방식을 설명합니다 - C ++에 대한 온라인 문헌 그리고 20년 동안 인터넷에 초급 프로그램을 작성하는 예가 많이 있었습니다.

C++에 적용될 기성 패키지(TS 문제용)를 본 적이 있습니까?

 
Igor Makanu :

"전문가"? - 당신과 이야기할 것이 없습니다. IMHO를 밀어넣으세요... 이 리소스에는 다양한 분야의 전문가가 있는 대규모 MQL 커뮤니티가 있습니다. 불행히도 커뮤니티에 유용한 지식을 보여주지 않았습니다. 다시 할 수 있습니다. 당신이 원하는 모든 것에 대해 나를 비난하십시오-"당신은 전문가입니다!"


개발자가 할 것인가? - 무엇을 그리고 왜? 잘 알려진 사용자가 아닌데 왜 필요한지 스스로도 설명할 수 없습니까? )))

MetaQoutes의 목적은 무엇입니까? - 여느 IT 기업과 마찬가지로 목표는 수익 창출! , 하지만 MetaQoutes가 서비스 홍보에 대해 매우 진지한 이유를 모르겠습니다. 알고리즘 거래를 대중화하고, 분석 자료를 제공하고, 인터넷 커뮤니티를 만들기 위해 많은 작업이 수행되었습니다. 몇 가지 IT 회사가 참여하고 있습니다. 이러한 자선 단체, 일반적으로 이들은 IT 거물입니다.

그래서 회사는 미래에 이익을 가져올 것에 자원을 소비합니다(사실이 아님) .... 하지만 여기에 ... 느린 Python 또는 Java의 개념을 MQl에 적용해야 하는 사용자가 나타났습니다 ... 재미없어요? - 당신은 몇 살입니까? ))))


확실히 - 나는 존경합니다. 종종 인내만이이 삶에서 당신의 틈새 시장을 찾는 데 도움이됩니다! 이 힘든 일에 행운을 빕니다!

이것은 이 주제에 대해 당신과 할 이야기가 아닙니다!
MetaQuotes의 효과적인 이점이 비동기식 프로그램을 작성할 수 있다는 점을 이해할 수 있는 충분한 논리도 없습니다.
그리고 그것은 비동기식 프로그램을 작성하는 전문가를 끌어들일 것입니다.
그리고 커뮤니티에는 문제와 아이디어를 논의할 수 있는 적절한 전문가가 충분히 있으며 자신의 말은 듣지 않습니다. 저는 전문가입니다.
아아, 전문가가 되려면 기술을 따라잡아야 하고 어떤 언어로 사용되는지는 중요하지 않습니다.
그들이 당신에게 무엇을 쓰는지, C ++로도 비동기식으로 쓴다는 말을 듣지도 못하지만, 아마도 이것을 이해하지 못할 것입니다. 당신은 비동기식 작업을 설정하지 않았습니다.
그리고 적당히 화를 내자. 평소에는 의사소통도 안 된다.

 
Roman :

이것은 이 주제에 대해 당신과 할 이야기가 아닙니다!

말을 하지 않지만 여전히 대답이 없습니다.


무역 터미널 에 왜 필요한지 질문에 답하십시오.
 
Maxim Romanov :
멀티스레딩은 특히 테스터, 특히 멀티 도구 모드에서 반드시 필요합니다. 나는 종종 생산성이 부족합니다. 그러나 나는 프로그래밍 분야의 전문가가 아니며 미묘함을 정말로 이해하지 못합니다. 많은 것을 병렬로 계산해야한다는 것만 알고 있습니다. 그리고 테스터를 병렬화하는 것이 매우 유용할 것입니다.
그리고 3차원 시각화를 개발할 예정인데, 계산, 인터페이스 이벤트, 외부 이벤트(서버 접근)와 함께 하나의 스레드에 넣는 것은 부적절합니다. DLL이 항상 한 가지 이유로 적합한 것은 아닙니다. 프로그램을 자유롭게 배포할 수 없습니다.
 
Igor Makanu :

확실히 아닙니다 - 더 좋을 것입니다! - 하지만 여기서 핵심 문제는 지원입니다. 누가 사용 방법을 설명할까요? 누가 버그를 고칠 것인가? - 누가 보장된 이해 가능한 기능을 제공할 것인가?

...

내 관점에서 이것은 가장 작은 문제입니다. 가장 중요한 것은 사람들이 이 주제에 대해 의사소통할 것이라는 점입니다. 포럼에는 새로운 주제가 필요합니다. 그렇지 않습니까? 점점 나아질 것입니다. 사용자에게 문제와 버그가 있는 경우 무엇이 중요할까요? 그리고 그들은 언제 없었습니까? )

 
Andrey Pogoreltsev :

요청의 비동기 실행이 필요하지만 멀티스레딩의 예를 들어 주셨습니다. 이 점을 살펴보라고 권했지만 결코 알아내지 못했습니다.

여기에서 귀하의 문제에 대한 해결책을 설명했습니다: https://www.mql5.com/en/forum/318593/page4#comment_12568119

그러나 나는 당신이 그 주제를 공부조차 하지 않았다고 확신합니다.

제 생각에는 비동기식 대기열이 주어지면 여전히 멀티스레딩을 요청하게 될 것입니다... 적어도 OVERLAPPED 및 이벤트 처리를 시작하려고 시도하면 코드에서 WinAPI를 요청하는 것입니까?)

멀티스레딩이 터미널에 도입되면 프로그래머 지망생들에게 광속보다 빠르게 죽을 것입니다.

프로그래머는 자신의 무지에 맞게 프레임워크를 변경하도록 요구하는 것이 아니라 문제에 대한 솔루션을 찾고 있습니다.

아니 아니, 당신은 착각하고 있습니다. 나는 모든 것을 보았고, 나는 그것을 분명히 이해할 것입니다.
그건 그렇고, 당신은 적어도 올바른 방향을 제시 한 유일한 사람입니다. 감사합니다. 나머지는 홍수 만 있습니다.
많은 사람들이 주제의 본질을 이해하지 못해서 그들의 질문에 답해야 했습니다. 여기에서 주제가 커졌습니다.
그리고 멀티스레딩이나 비동기화에 대한 여러 기술이 있어서 이해가 잘 안 되는 경우가 많습니다.
그리고 그 예들은 인터넷에서 서둘러 인용해야 했고, 심지어 그들조차도 기술의 본질을 적어도 어떻게든 설명했습니다.
아무도 다른 기술을 보여주고 어떻게 작동하는지 설명하려고 애쓰지 않았습니다.

 
Roman :

아니 아니, 당신은 착각하고 있습니다. 나는 모든 것을 보았고, 나는 그것을 분명히 이해할 것입니다.
그건 그렇고, 당신은 적어도 올바른 방향을 제시 한 유일한 사람입니다. 감사합니다. 나머지는 홍수 만 있습니다.
많은 사람들이 주제의 본질을 이해하지 못해서 그들의 질문에 답해야 했습니다. 여기에서 주제가 커졌습니다.
그리고 멀티스레딩이나 비동기화에 대해서는 여러 기술이 있어서 이해가 잘 안 되는 경우가 많습니다.
그리고 그 예들은 인터넷에서 서둘러 인용해야 했고, 심지어 그것들조차도 적어도 기술의 본질을 어떻게든 설명했습니다.
아무도 다른 기술을 보여주고 어떻게 작동하는지 설명하려고 애쓰지 않았습니다.

멀티스레딩 - 작업이 여러 스레드에서 실행됩니다. 그들은 하나의 프로세서에서 작동할 수 있습니다. 모두 동일하게 프로세서 시간 할당량이 끝난 후에 멀티스레딩 및 전환이 있을 것입니다. 공유 리소스에 액세스하려면 동기화가 필요합니다. 교착 상태, 경쟁 조건, 메모리 해제 오류 및 기타 "놀라움"으로 가득 차 있습니다.

비동기 - 일반적으로 다른 장치(네트워크 장비, 저장 장치, 주변 장치 등)에서 기능의 비차단 실행(즉, 메서드가 종료된 직후 제어 반환). 예를 들어 고성능 다중 사용자 서버를 작성할 수 있습니다. 클라이언트 연결을 처리하기 위해 하나의 스레드와 상태 머신만 사용합니다. 그것은 모두 이 서버의 목적에 달려 있습니다.

귀하의 경우 WinAPI를 사용하여 많은 수의 연결을 생성해야 하며 예를 들어 타이머 스레드를 유지하지 않도록 시간 초과가 있는 WaitForMultipleObjects를 통해 이러한 연결의 상태를 확인할 수 있습니다.

추신. 이론적으로 IOCompletionPort를 사용할 수 있지만 더 많은 지식과 명확한 설계가 필요합니다.
 
Andrey Pogoreltsev :

멀티스레딩 - 작업이 여러 스레드에서 실행됩니다. 그들은 하나의 프로세서에서 작동할 수 있으며, 모두 동일하게 멀티스레딩이 있고 프로세서 시간 할당량이 끝나면 프로세서 간에 전환됩니다. 공유 리소스에 액세스하려면 동기화가 필요합니다. 교착 상태, 경쟁 조건, 메모리 해제 오류 및 기타 "놀라움"으로 가득 차 있습니다.

정말 모든 것이 위험합니까? 메모리 해제 오류... 하지만 다른 차트에서 실행된 Expert Advisors는 다른 스레드에서 작동하며 예기치 않은 오류는 없는 것 같습니다. 즉, 권고자 사이에 분산된 작업은 심각한 오류를 수반하지 않지만 한 권고자 내 스레드 간에 분산된 작업은 어떻게 될까요? 물론 제가 이런 문제에 대한 전문가는 아니지만, 어드바이저 간에 업무를 분담하는 방식을 1인의 어드바이저로 옮기는 것이 어떤 문제일까요? 아마도 문제가있을 것입니다. 나는 논쟁하지 않습니다.

 
Andrey Pogoreltsev :

멀티스레딩 - 작업이 여러 스레드에서 실행됩니다. 그들은 하나의 프로세서에서 작동할 수 있으며, 모두 동일하게 멀티스레딩이 있고 프로세서 시간 할당량이 끝나면 프로세서 간에 전환됩니다. 공유 리소스에 액세스하려면 동기화가 필요합니다. 교착 상태, 경쟁 조건, 메모리 해제 오류 및 기타 "놀라움"으로 가득 차 있습니다.

비동기 - 일반적으로 다른 장치(네트워크 장비, 저장 장치, 주변 장치 등)에서 기능의 비차단 실행(즉, 메서드가 종료된 직후 제어 반환). 예를 들어 고성능 다중 사용자 서버를 작성할 수 있습니다. 클라이언트 연결을 처리하기 위해 하나의 스레드와 상태 머신만 사용합니다. 그것은 모두 이 서버의 목적에 달려 있습니다.

귀하의 경우 WinAPI를 사용하여 많은 수의 연결을 생성해야 하며 예를 들어 타이머 스레드를 유지하지 않도록 시간 초과가 있는 WaitForMultipleObjects를 통해 이러한 연결의 상태를 확인할 수 있습니다.

추신. 이론적으로 IOCompletionPort를 사용할 수 있지만 더 많은 지식과 명확한 설계가 필요합니다.

여기는 대화인데, asyncio로 논블로킹 실행했는데 여기에 코루틴이나 콜백이라는 단어를 쓰면 그런 이해가 시작되니까 가만히 있는 게 낫다))
비차단 호출의 원리는 나에게 알려져 있지만 파이썬에서만, 그리고 C 및 C ++ 라이브러리가 하나 더 있습니다.
아직 WinAPI로 작업을 해보지 않아서 공부를 해봐야겠습니다. 다른 라이브러리는 많이 보지는 않았지만 별차이는 없습니다. 가장 중요한 것은 문법을 이해하고 그 다음에 뭐가 뭔지 이해하는 것입니다 ))
그러나 대화 중에 그는 기본 mql에 유사한 기능을 추가하여 즉시 비동기 코드를 작성할 수 있다고 제안했습니다.
그리고 오해가 시작되었고, 왜 그리고 왜. 예 patamushta))