Добрый день! Объясните, пожалуйста, как правильно делить потоки при тестировании(оптимизации) для полной загрузки всех ядер процессора и оперативной памяти? Какие рекомендации для оптимизации скорости алгоритмов? (чем пользоваться, чем не пользоваться) В примере:
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
{
......
... для каждого периода создается свой отдельный инструмент, портфель, стратегия, шлюз для тестирования и т.д. Это сделано для того, чтобы отдельные потоки могли менять свою копию данных, не создавая коллизии в других потоках тестирования. Как такой код может параллельно считать в несколько потоков? Как-то не ясно из примера...
Комментарии (2)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Для реализации обоих схем, не обязательно, даже, навыки работы с многопоточностью в C#, большая часть распараллеливания будет сделана неявно.
В примере:
каждый элемент списка (например первый:80, 10, Colors.DarkGreen), это параметры стратегии, которые мы хотим проверить, т.о. у нас имеется три пакета параметров, которые мы хотим проверить/протестировать. Далее в коде мы создаем три абсолютно независимых направления, вплоть до того, что трейдер у нас будет разный (свой в каждом направлении), но при этом источник данных (хранилище storageRegistry) у нас одно. И поскольку, S# активно использует возможности многопоточности (в своей реализации, в библиотеках), то все эти три направления будут работать в разных не зависимых потоках, которые в свою очередь будут распределены автоматически, средствами операционной системы, на разные процессоры, по возможности. Таким образом, не оперируя явно потоками. мы можем распараллеливать тестирование.
Спасибо, Иван! Ваши советы очень помогают! 👍