Процессор Intel Core i7 имеет 4 физических ядра, но каждое ядро может одновременно вводить до 2 потоков, отображая в общей сложности 8 потоков для операционной системы в виде «доступных логических процессоров».
В действительности одно ядро может обрабатывать только один поток за раз, но у него есть специальные механизмы организации очередей / синхронизации / планирования, позволяющие двум потокам одновременно находиться на разных этапах "конвейера". Это позволяет процессору завершить 2 потока раньше, чем если бы он обрабатывал только один поток за раз. Поскольку оба потока совместно используют один и тот же конвейер, выигрыш в производительности, очевидно, не будет в 2 раза. Большинство тестов дают преимущество в диапазоне от 10% до 50% в зависимости от типа выполняемых инструкций.
В ответ на ваш вопрос, если вы запустите 4, 8 или 16 экземпляров вашей программы, все они будут «запущены», но инструкции для каждого из них будут поставлены в очередь в зависимости от того, сколько доступно THREADS. Как только вы выйдете за пределы количества доступных ФИЗИЧЕСКИХ ЯДЕР (например, 5 или более), производительность снизится, поскольку любые потоки за пределами базы 4 будут совместно использовать физическое ядро ЦП.
Наконец, как только вы достигнете предела доступных возможностей многопоточности ЦП (превышающих 8 потоков), ОС начнет выполнять инструкции по планированию / организации очередей, чтобы дождаться завершения тех, которые находятся в конвейере. В идеале вы хотите избежать обхода доступных потоков, поскольку это может отрицательно сказаться на производительности и стать узким местом системы.