Давайте немного расширим мой комментарий. Как я уже сказал, приведенный вами пример слишком абстрактен, чтобы дать какой-то конкретный c совет, как улучшить производительность.
Из того, что я могу сказать, вы хотели распределить работу поровну между несколькими потоками. В большинстве случаев вы не можете просто разделить все «размеры» на x при создании потоков x.
Представьте себе более конкретную задачу: у вас есть двумерная матрица, представляющая шахматную доску. Вы хотите перебрать все элементы матрицы и выполнить некоторые операции. В итоге у вас получится цикл, похожий на этот:
for (int i = 0; i < dim1; i++){
for (int j = 0; j < dim2; j++){
\\do something here
}
}
В этом примере нам нужно перебрать dim1 * dim2
элементов.
Допустим, мы хотим разделить работу между 4 потоки. Если вы разделите dim1
и dim2
на 4, вы получите матрицу 4 на 4, то есть 16 частей. Это наиболее заметно, когда вы представляете себе физическую шахматную доску.
Если у вас есть 4 потока, вы должны разделить работу на 4 (обычно равные) части. В этом случае вы можете либо разделить dim1
и dim2
на 2, всего 4 детали, либо только одно измерение на 4.
Редактировать. Вероятно, то же самое относится и к вашей проблеме. Если у вас есть x агентов, у каждого по 20 пальцев, а у y клиентов по 20 пальцев, вы, вероятно, захотите сравнить каждого с каждым.
Для 4 потоков вы не можете просто взять 1/4 агентов, 1/4 их пальцев и сравнить с какой-то частью клиентов - и только 1/4 их пальцев. Все, что вы можете сделать, это взять 1/4 агентов, все 20 их пальцев и сравнить со всеми пальцами всех клиентов.