MT5 ve iş başında hız - sayfa 75

 
Valeriy Yastremskiy :

Ben bir uzman değilim. grafiklerde. Önem, diğer görevlerin yerine getirilmesinin başlamasının mevcut olanın tamamlanmasına bağımlılığı ile belirlenir. diğer kriterler ikincildir. ancak bir görev yürütme süresi de vardır. ve aynı zamanda yaşıtları arasında en önemlisidir. Genel olarak, zor ve en üzücü olan şey, hareket halindeyken yerleşik öncelik algoritmasını değiştirmenin mümkün olmamasıdır. İyi bir not olarak, sorular ortaya çıkmadan önce geliştiricilerden açıklama istiyorum. Zor, ancak çevrenin geliştirilmesinde doğru hedef budur.

Bunun gerçek zamanlı sistemlerde nasıl çalıştığının açıklamasından alıntı.

Genellikle öncelikler dinamiktir, bu da yürütme sırasında hem süreçlerin kendileri hem de işletim sistemi tarafından değiştirilebileceği anlamına gelir.
Kesintilere verilen yanıt, önemli işlemci kaynakları gerektiren hesaplamalardan ayrılır.
Bir olay veya kesinti meydana gelir gelmez, işleyicisi hemen hazır işlemler kuyruğuna dahil edilir.
Kesinti rutinleri, hızlı yanıt vermeleri gerektiğinden genellikle kompakttır.
örneğin, yeni veri girişi ve daha düşük bir öncelikte çalışan daha karmaşık, CPU yoğun işlemlere aktarım kontrolü.

 
Roman :

Merhaba Nikolay. Demek öyle.
Ama senkronizasyon ile aynı sorun olmaz mıydı? Glory'nin konuştuğu, yani haksız frenler.
Ya da belki sorun yok? )) Belki de asenkron modeli kullanmamak, önceliklerle senkronize etmekten daha kolaydır? ))

Merhaba.
Biraz bilgim ve deneyimim olmasına rağmen, uyumsuzluk ve kesintiler konusunda uzman değilim.
Zamanlayıcı söz konusu olduğunda, hiçbir sorun olmamalıdır. Çünkü Sıra önemli değil, frekans önemlidir. Ve kaynakların dağıtımında oturan patronun bunu nasıl çözeceği tamamen önemsizdir.
Ayrıca, anladığım kadarıyla zamanlayıcı, sistem donanım kesintileri üzerine kuruludur. Tüm eşzamansız kontrol sisteminin, zamanlayıcıdan gelenler de dahil olmak üzere donanım kesintileri kullanılarak uygulandığını düşünüyorum.
Benim için soru, kesintinin kendisinin ne kadar kaynak yoğun olduğudur.
Örneğin, bir global değişkeni artırmak için bir işlemci zamanlayıcı tuzağı oluştu. Sistem bu artış için yaklaşık 1 nanosaniye harcayacaktır. Ancak:

  • Çalışmaya devam etmek için gerekli olan çalışan işlemlerin ve (veya) iş parçacıklarının tüm parametrelerini kaydetmek ne kadar sürer?
  • Bu tasarruf donanımdan mı yoksa yazılımdan mı geçiyor?
  • İyileşme süreci ne kadar sürer?
  • Bu kaynak yoğunluğunu ölçmek mümkün müdür? Muhtemelen hayır, çünkü kesinti anı nasıl yakalanır?
  • Bu kaynak maliyetleri için rakamların sırası nedir - onlarca, yüzlerce nanosaniye, mikrosaniye veya onlarca ve yüzlerce mikrosaniye? Bu tür bilgileri almak ilginç olurdu.

Genel olarak, yeterli bilgi ve deneyim olmadığını anlıyorum. Bu nedenle, geliştiricilerle uyumsuzluktaki öncelikler hakkında soru sormamaya çalışıyorum. Çünkü Kusursuz bir sistem oluşturmaya çalışırken, özellikle ticaret emirleri ve ticaret bilgilerinin alınması söz konusu olduğunda, birçok nüans, tuzak ve çıkmaz olduğunu anlıyorum.
Her ne kadar dürüst olmak gerekirse, 5'te neden bazı işlevleri asenkron hale getirdiklerini hala anlamıyorum, bu da büyük bir rahatsızlık yaratıyor. ChartGet.., ChartTimePriceToXY, ChartXYToTimePrice demek istiyorum.
Sonuçta, grafik durumu tablosunun doldurulmasının eşzamansız olması gerektiğini ve komutların kendilerinin yalnızca bu tablodan veri okuması gerektiğini varsaymak mantıklıdır. Ve okuma anındaki veriler birkaç milisaniye kadar eskiyse, bu bir sorun değildir.
Sorun şu ki, hayali veri alaka düzeyinin peşinde, elde edilen alaka düzeyinin daha büyük ölçüde alakasız hale geldiği onlarca milisaniyelik gecikmeler var, eğer başlangıçta bu komutlar asenkron olmasaydı, sadece bilinen son veriyi okurlardı. grafik durum tablosu.
Ve yürütme süresine bakılırsa, 4'teki bu işlevler eşzamansız değildi.

 
Roman :

Bunun gerçek zamanlı sistemlerde nasıl çalıştığının açıklamasından alıntı.

Genellikle öncelikler dinamiktir, bu da yürütme sırasında hem süreçlerin kendileri hem de işletim sistemi tarafından değiştirilebileceği anlamına gelir.
Kesintilere verilen yanıt, önemli işlemci kaynakları gerektiren hesaplamalardan ayrılır.
Bir olay veya kesinti meydana gelir gelmez, işleyicisi hemen hazır işlemler kuyruğuna dahil edilir.
Kesinti rutinleri, hızlı yanıt vermeleri gerektiğinden genellikle kompakttır.
örneğin, yeni veri girişi ve daha düşük bir öncelikte çalışan daha karmaşık, CPU yoğun işlemlere aktarım kontrolü.

Her şey anlattığım gibi)))) Elbette önceliklerin mantığı dinamiktir. Ve bu, seviyenin görevinin karmaşıklığıdır. öncelik seviyesini belirleyerek, aşağıdaki ortamda dinamik önceliklendirme mantığında yürütülmesi için son tarihi belirleyemeyiz. terminal her zaman wine veya linux ortamının üzerindedir ve aşağıdaki ortam önceliklendirme mantığını etkileyemez.

 
Nikolai Semko :


Sorulan soruların hepsinin cevabı yok.

Kesmenin kendisinin ne kadar kaynak yoğun olduğu.
Büyük olasılıkla işlemcinin frekansına bağlıdır.

Daha fazla yenileme için sürecin kaydedilmesi ne kadar sürer ?
Kuantizasyona dayalı algoritmalara göre, aşağıdaki durumlarda aktif bir süreç değişikliği meydana gelir:

  • süreç sonlandırıldı ve sistemden ayrıldı
  • bir hata oluştu
  • İşlem Bekleme durumuna girdi.
  • bu işleme ayrılan işlemci süresi miktarı tükendi

Kesinti anı nasıl yakalanır.
Ön ölçekleyici, bir veya daha fazla seri bağlantılı T-flip-flop olarak çalışan bir saat bölücüdür.

 
Roman :

Sorulan soruların hepsinin cevabı yok.

Git konuyu öğren (en az 10 yıl) ve lütfen bu konuyu çöpe atma.

Burada farklı bir hazırlık ve farklı bir sınıfla konular tartışılır.

 
Nikolai Semko :
  • Çalışmaya devam etmek için gerekli olan çalışan işlemlerin ve (veya) iş parçacıklarının tüm parametrelerini kaydetmek ne kadar sürer?
  • Bu tasarruf donanımdan mı yoksa yazılımdan mı geçiyor?

286 cpu ile başlayan hiçbir şey olmuyor mu? xs, hatırlamıyorum ve hiç ilgilenmedim ama kesinlikle Pentium-1 ile (üzerinde bir kitap okudum, uzun zamandır doğru)

işlemci korumalı modda çalışır, her işleme sanal bellek tahsis edilir, bellek bankalarının (RAM hücreleri) fiziksel adresleri işlemcinin kendisi tarafından sanal adreslere çevrilir (tam tersi?) ancak özel bir kayıt ve adres çeviri tablosuna sanal bir işaretçi gibi görünüyor). Bu donanımın hepsi bitti, ölçülebilir değil, bu Intel işlemcilerin her satırını ayıran sözde işlemci çekirdeği, bu bir önbellek değil!

Nikolay Semko :
  • İyileşme süreci ne kadar sürer?

Win'deki herhangi bir program bir işlem olarak kaydolmalı ve en az bir iş parçacığı oluşturmalıdır

daha sonra Vin görev zamanlayıcı, sürece kaynakları tahsis edecek ve sırasına, zamanlayıcının nasıl çalıştığına dair mesajlar gönderecektir - Hiç ilgilenmedim, sürecin önceliğinin yükseltilebilmesi benim için yeterli ve gereken özenle PC'nin kurcalamaya başlar, yani Microsoft, uygulamama kaynak veriyor, bu, işletim sisteminin çalışmasına girmemek için yeterli

Nikolay Semko :
  • Bu kaynak yoğunluğunu ölçmek mümkün müdür? Muhtemelen hayır, çünkü kesinti anı nasıl yakalanır?
  • Bu kaynak maliyetleri için rakamların sırası nedir - onlarca, yüzlerce nanosaniye, mikrosaniye veya onlarca ve yüzlerce mikrosaniye? Bu tür bilgileri almak ilginç olurdu.

hey, neyin ölçüleri? kesintiler donanımdır, işletim sistemi tarafından, elbette, sürücülerin yardımıyla gerçekleştirilir.

zamanlayıcı? - işletim sistemine bir zamanlayıcı kaydettirirsiniz, bunu işlem kuyruğunda normal bir mesaj olarak alırsınız, eğer yanılmıyorsam, o zaman işlem bunları işlemezse zamanlayıcı mesaj sırasını dolduramaz, işletim sistemi kusursuz seviyesinde bir şey , Google WM_TIMER - ayrıntılı olmalıdır

sayıların sırası? yalnızca işlemci döngülerini ölçebilirsiniz, ardından Windows burada tartışılan hesaplanan katsayısı ile çarpar https://www.mql5.com/ru/forum/352454#comment_18588098

 
Renat Fatkhullin :

Git konuyu öğren (en az 10 yıl) ve lütfen bu konuyu çöpe atma.

Burada farklı bir hazırlık ve farklı bir sınıfla konular tartışılır.

Burada herkesin gönderilmesi gerekiyor ve seçici olarak değil)) Ama her zaman olduğu gibi, yeterli soru soran kişi şapka alıyor.
İşleyicilerin engelleme modunda yürütüldüğünü öğrendikten sonra bu konuya değinmedim.
Sorunun gerçek özüne dokundum ve sen bundan hoşlanmadın. Neyse bu konuyu kapatayım.
Ama senkron işlemede zamanında olaylara ulaşmakta bir anlam görmüyorum.
Teşekkürler Nikolai, Valery, yapıcı diyalog için teşekkürler.

 
Igor Makanu :

286 cpu ile başlayan hiçbir şey olmuyor mu? xs, hatırlamıyorum ve hiç ilgilenmedim ama kesinlikle Pentium-1 ile (üzerinde bir kitap okudum, uzun zamandır doğru)
Bu donanımın hepsi bitti, ölçülebilir değil, bu Intel işlemcilerin her satırını ayıran sözde işlemci çekirdeği, bu bir önbellek değil!

Peki öyleyse.
Sanırım öyle. Hemen hemen her şey demir seviyesinde. Aksi takdirde, çoklu kullanım o kadar verimli olmaz.

 
Nikolai Semko :

Peki öyleyse.
Sanırım öyle. Hemen hemen her şey demir seviyesinde. Aksi takdirde, çoklu kullanım o kadar verimli olmaz.

tek yol

google arama: işlemci korumalı mod

yanılmıyorsam, korumalı mod işletim sistemi çekirdeğine ayrı bir ayrıcalık seviyesi verir ve her işlem için sanal bellek nedeniyle, çalışan bir program için RAM verisi almak imkansızdır ... ayrı bir süreç olarak bir hata ayıklayıcı altında çalıştırın .... bu diğer bilgi alanlarından

ancak, açıkça, her şey donanım düzeyinde çalışır, yalnızca işletim sistemi aracılığıyla ölçmek imkansızdır - ve işlemler için sanal belleğin değiştirilmesi anlıktır ve işlemcinin kendisi dahili frekansta çalışır - işlemci çarpanı .. . ve önbellek hakkında düşünmeye başlarsanız, o zaman ... neden? - Bir sorun var, çözüm arıyoruz! bir sürücü yazmak ister misin? demir bulmak için sol? )))

Not: Bir sürücü yazabilirsiniz, bir TCP kaydedici kullandığımı hatırlıyorum, bir sürücü olarak yüklendi ve tüm trafiği kaydetti ve ardından tüm trafiği tablodaki işlemlerle görüntüledi .... sürücüleri yazmak karlı bir araç geliştirmeye yardımcı olacaktır))))



UPD: Habr "Korumalı Mod Nedir ve Neyle Yenir" https://habr.com/ru/post/118881/

UPD: kod yürütme için donanım düzeyi (işlemci) ayrıcalıkları - Wiki Rings of Protection

 
Renat Fatkhullin :

inc eax gibi en basit birleştirici olanlar da dahil olmak üzere, herhangi bir komutun rastgele tek ölçümlerinde her zaman hata yaşamanız garanti edilir . Bu mimaridir ve "binlerce iş parçacığından oluşan zaman dilimlerinin az sayıda çekirdeğe dürüst dağılımının" fiziksel sınırlamaları ile açıklanır.

Zaten aptal olmak ve milyon istek başına tek aykırı değer yakalamaya devam etmek için yeterli.

CopyTicks'in nadiren geciktiğini fark ettim. Bir test senaryosu yazdı

 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnTick ()
{
   Sleep ( 1000 );
  
   MqlTick Tick[ 1 ];
  
  _B( CopyTicks ( _Symbol , Tick, COPY_TICKS_ALL , 0 , 1 ), 100 );
  _B( SymbolInfoTick ( _Symbol , Tick[ 0 ]), 100 );
}

ve stres modunda çalıştırın. SymbolInfoTick, CopyTicks'ten belirgin şekilde daha fazla uyarıya sahiptir.


İddiasız. Sadece bu fonksiyonların uygulamalarında neyin stres yükünün farklı algılanmasını etkilediğini anlamak istiyorum.