Добрый день! Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти? Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться) В примере:
var periods = new[]
{
new Triple<int, int, Color>(80, 10, Colors.DarkGreen),
new Triple<int, int, Color>(70, 8, Colors.Red),
new Triple<int, int, Color>(60, 6, Colors.DarkBlue),
};
foreach (var period in periods)
{
// создаем тестовый инструмент, на котором будет производится тестирование
var security = new Security
{
......
... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования. Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...
Kommentare (2)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Для реализации обоих схем, не обязательно, даже, навыки работы с многопоточностью в C#, большая часть распараллеливания будет сделана неявно.
В примере:
каждый элемент списка (например первый:80, 10, Colors.DarkGreen), это параметры стратегии, которые мы хотим проверить, т.о. у нас имеется три пакета параметров, которые мы хотим проверить/протестировать. Далее в коде мы создаем три абсолютно независимых направления, вплоть до того, что трейдер у нас будет разный (свой в каждом направлении), но при этом источник данных (хранилище storageRegistry) у нас одно. И поскольку, S# активно использует возможности многопоточности (в своей реализации, в библиотеках), то все эти три направления будут работать в разных не зависимых потоках, которые в свою очередь будут распределены автоматически, средствами операционной системы, на разные процессоры, по возможности. Таким образом, не оперируя явно потоками. мы можем распараллеливать тестирование.
Спасибо, Иван! Ваши советы очень помогают! 👍