
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кстати я вот думаю, а нужно ли делать копии данных при создании нескольких потоков на оптимизацию. Ведь пока один поток берёт следующие котировки из массивов в оперативной памяти то они в регистры процессора передаются по одной шине данных и второй поток по-любому ждёт, пока первый не возьмёт данные. Так может имеет смысл просто синхронизировать доступ потоков к одной копии данных в оперативной (с файлом подкачки) памяти? Ведь наверно именно процесс расчёта в эксперте забирает львиную долю процессорного времени и пока один считает другой в это время может брать данные или тоже заниматься расчётом. К томуже если один поток взял котировки то вотрой может их взять из кеша первого уровня процессора, который 1 мегабайт. Совпадение моментов когда два и больше потока захотят обратиться к памяти будет относительно не много (я так думаю :))
Поэксперементируйте с этим в МТ5. Я подозреваю что не сильно потеряется скорость, если сделать синхронизацию потоков вместо создания копии данных на каждый поток.
chv, у тебя загрузка 50 процентов ядра потому что не запущен оптимизатор в МТ. Если его запустить то ядро проца загрузиться по уши, причём одно пока ещё не сделано распаралеливание задачи оптимизации на несколько потоков кратному количеству ядер. Если два терминала загрузить оптимизацией то она два ядра загрузятся выше 50 процентов.
Если внимательно посмотреть на мой screenshot на 4-й странице темы, на нём видно, что работает как раз оптимизатор, в нём прошло 5 шагов из 16-ти.
Могу отметить, что по результатам неоднократных наблюдений только два терминала, одновременно работающих, плюс СУБД MS SQL Server, могут загрузить двухядерный CPU на 100%. Один терминал в любом режиме (тестер, оптимизатор) грузит CPU на ~49-53%, что укладывается в погрешность с учётом того, что на системе работает не только процесс терминала, но и Spider антивируса, firewall, Media player, downloader и т.д.
Да не разглядел повнимательнее твой скриншот. Может быть загружается не на все сто потому что приоритет потока не высокий на оптимизацию - типа idle или low. Иначе всё подвиснет и будет очень вяло реагировать на команды пользователя.
Я не занимаюсь такой деятельностью, как изменение приоритета процесса или потоков терминала. Он просто запускается и работает, как есть. И машина вполне неплохо на всё реагирует, пока терминал один. В числах это выражается загрузкой CPU на 50%, о чём я и пишу.
Может, ещё у кого-то есть X2 процессор, и человек поделится своим результатом загрузки CPU от одного терминала?
Так может имеет смысл просто синхронизировать доступ потоков к одной копии данных в оперативной (с файлом подкачки) памяти? Ведь наверно именно процесс расчёта в эксперте забирает львиную долю процессорного времени и пока один считает другой в это время может брать данные или тоже заниматься расчётом. К томуже если один поток взял котировки то вотрой может их взять из кеша первого уровня процессора, который 1 мегабайт. Совпадение моментов когда два и больше потока захотят обратиться к памяти будет относительно не много (я так думаю :))
Поэксперементируйте с этим в МТ5. Я подозреваю что не сильно потеряется скорость, если сделать синхронизацию потоков вместо создания копии данных на каждый поток.
Каждый процесс (а терминал является отдельным exe-процессом) имеет в Windows своё изолированное адресное пространство, поэтому обычными методами вы не получите доступ к памяти другого процесса (другого терминала). Это два независимых процесса. Внутри одного процесса (одного работающего терминала) его потоки, конечно же, могут получать совместный доступ к памяти (желательно safe-threading доступ, с синхронизацией через семафоры, мьютексы и критические секции Win API), но это будет доступ к памяти в пределах одного терминала.
Терминалы могут обмениваться данными друг с другом: через файлы на диске, СУБД, сетевые сокеты, веб сервисы и т.д., но это в любом случае будет не общий доступ к одной области оперативной памяти, и не к одному кешу CPU точно. Насколько это целесообразно, рассчитать всё в терминале или скопировать из другой копии терминала, если она есть, можно проверить только реальными unit-тестами.
Но по-любому это надо проверять тестами с общим массивом для всех потоков и так же вариант, когда для каждого потока своя копия.
Кстати, если один поток взял данные и второй следом за ним обращается к тем же данным, то я думаю он берёт их уже из кеша процессора - для чего собственно он такой большой около 1 мегобайта? Конечно, что происходит на низком уровне мы не знаем, но я лично думаю что так.