Или решить между параллельной и последовательной операцией в целом. Трудно узнать, не проверяя, лучше ли параллельная или последовательная реализация из-за накладных расходов. Очевидно, что потребуется некоторое время, чтобы обучить «решающего», какой метод использовать. Я бы сказал, что этот метод не может быть совершенным, поэтому он носит вероятностный характер. x,y,z
действительно влияют на «решающий». Я думаю, что очень наивная реализация будет заключаться в том, чтобы дать как 1/2
шанс в начале, а затем начать одобрять их в соответствии с прошлой работой. Это не учитывает x,y,z
. Во всяком случае, пожалуйста, поделитесь своей эвристикой, вашим опытом, если таковые имеются, вашими советами по этому вопросу.Как решить, используя PLINQ и LINQ во время выполнения?
Пример кода:
public interface IComputer {
decimal Compute(decimal x, decimal y, decimal z);
}
public class SequentialComputer : IComputer {
public decimal Compute(... // sequential implementation
}
public class ParallelComputer : IComputer {
public decimal Compute(... // parallel implementation
}
public class HybridComputer : IComputer {
private SequentialComputer sc;
private ParallelComputer pc;
private TheDecider td; // Helps to decide between the two.
public HybridComputer() {
sc = new SequentialComputer();
pc = new ParallelComputer();
td = TheDecider();
}
public decimal Compute(decimal x, decimal y, decimal z) {
decimal result;
decimal time;
if (td.PickOneOfTwo() == 0) {
// Time this and save result into time.
result = sc.Compute(...);
} else {
// Time this and save result into time.
result = pc.Compute();
}
td.Train(time);
return result;
}
}
Хорошая идея - но у нее есть одна проблема. Что делать, если пользователь выполняет какую-либо другую длительную операцию в другом потоке во время одного метода, но не в другом? Результатом будет то, что случай, когда другой процесс крал процессорное время, выглядит хуже, чем есть на самом деле. Вам нужно будет использовать какой-то способ отслеживания того, сколько времени система тратит только на ваш процесс. –
@Billy, хороший комментарий - продолжайте. Я вспоминаю о практикующих. –
Кто-то упомянул жесткое кодирование ... это может быть способ сделать это. Тогда мой вопрос: я должен оставить неповрежденным (если утверждение + тесты), так что легко переключаться с коммутатором так или иначе, если предположения меняются? Это не должно стать темой PHD. –