Вот спецификации машины:
CPU(s): 20
Thread(s) per core: 1
Core(s) per socket: 10
Socket(s): 2
Исходя из того, что я читал до сих пор, эти числа означают, что я могу выполнять 20 параллельных заданий, потому что у меня 20 процессоров.
Однако сколько потоков я могу запустить в каждом из этих процессоров?
Добро пожаловать в ServerFault!
У вас есть два сокета ЦП, то есть два физических процессора. Каждый процессор имеет 10 ядер, каждое из которых по сути эквивалентно классическому одноядерному процессору. Каждое ядро может одновременно запускать только 1 поток, т.е. гиперпоточность отключена.
Таким образом, вы можете иметь до 20 параллельных потоков, по одному на процессор / ядро. Это может означать 20 однопоточных заданий, 1 многопоточное задание с 20 потоками или что-то среднее.
Но это только для потоков, которые, как ожидается, будут на 100% загружены на работе все время, почти каждую миллисекунду своей жизни. Если ваши потоки собираются провести какое-то значительное время в ожидании чего-то еще, система автоматически сможет запускать другие потоки, пока ваш поток (-ы) ждут.
Если вы не находитесь в среде, которая сильно оптимизирована для обработки чисел, вы не получите все эти 20 потоков для себя в 100% случаев: фоновые процессы (демоны) ОС будут занимать некоторые из них. в течение некоторого (небольшого) промежутка времени. Бегать ps -ef
(или эквивалент) в любой современной unix-подобной системе, когда она простаивает: вы увидите более 20 процессов, каждый из которых содержит хотя бы один поток, и это только для самой ОС.
Предположение, что вы получите максимальную отдачу от системы, выделив ровно столько потоков, сколько доступно аппаратному обеспечению, может быть чрезмерным упрощением проблемы оптимизации. В зависимости от того, что именно вы делаете, вы можете использовать больше или меньше потоков. Например, если вы планируете тяжелые вычислительные задания, которые по своей природе связаны с ЦП, вы можете получить лучшие результаты, выделив для задания чуть меньше 20 потоков, так что одно или два ядра ЦП останутся доступными для фоновых задач ОС. , поэтому ваши рабочие потоки будут реже прерываться.
Но если вы настраиваете среду сервера J2EE, JVM обычно будет иметь большое количество потоков, и большинство из них будет проводить большую часть своей жизни в ожидании ввода, поэтому общее количество потоков, используемых JVM сервера J2EE на Система с 20 процессорами может легко оказаться выше 20.