Название, которое я допускаю, немного вводит в заблуждение, но я немного растерялся, почему это происходит.
Я написал программу на Java, которая принимает аргумент x, который создает x количество потоков для выполнения работы программы. Машина, на которой я работаю, имеет 8 ядер / может обрабатывать 32 потока параллельно (каждое ядро имеет 4 гиперпотока). Когда я запускаю программу после 8 потоков (то есть 22), я замечаю, что если я запускаю ее с равным количеством потоков, программа работает быстрее, чем когда я запускаю ее с 23 потоками (что на самом деле медленнее). Разница в производительности составляет около 10% между двумя. С чего бы это? Перегрузка потоков на самом деле не принимает это во внимание, и я чувствую, что, пока я работаю <32 потоков, это должно быть быстрее, если я увеличу количество потоков. </p>
Чтобы дать вам представление о том, что делает программа, программа берет массив 1000 * 1000, и каждому потоку назначается часть этого массива для обновления (округления / остатки в неравных значениях даются последнему созданному потоку).
Есть ли веская причина для разницы в производительности нечетных / четных потоков?