Что важнее: ядра или потоки?
Что такое технология мультипоточности и для чего она нужна?
Если очень просто - то это второй поток команд, который используется планировщиком задач операционной системы, чтобы использовать ресурсы процессора более эффективно.
А теперь чуть сложнее. Во время работы к вычислительным ядрам процессора идет непрерывный поток команд от планировщика операционной системы. Теперь представим, что у нас процессор на 1 ядро и 1 поток и мы работаем в какой-то программе. У нас все хорошо, так как поток команд от этой программы идет на ядро, оно его обрабатывает - все гуд.
Теперь открываем еще одну программу. Планировщик также помещает ее инструкции в очередь, но ядро у нас всего одно. Тогда, в зависимости от приоритета, одна из программ тупо не будет выполняться, так как выполнять ее не на чем - ядро-то одно.
В 2002 году в intel озадачились этой проблемой. Так как процессор на 2 физических ядра был еще не готов, решили изящно выкрутиться из положения: к одному физическому ядру подводить два потока инструкций. Так и получился Hyper-Threading.
Главное отличие физических ядер от логических.
Само собой, логическое ядро - это не дополнительный вычислительный блок, а как бы второй путь к одному блоку, так что "производительность на бумаге" он не увеличивает... НО
Теперь при открытии второй программы, первая не перестанет выполняться а будет ожидать процессорное время, и если оно появится - ядро переключится на второй поток и будет исполнять уже его, и, если это нужно, позже снова переключится на первый поток. Таким нехитрым образом на одном ядре можно исполнять сразу два потока команд.
Даже больше скажу: если одна программа задействует два потока, то в случае какой-то проблемы с первым потоком ядро опять таки переключится на второй поток и продолжит выполнение программы, а не будет ждать, пока решится проблема на первом потоке.
Если подытожить, то мультипоточность - это когда одно ядро процессора может выполнять несколько потоков команд, но не параллельно (ядро все-таки одно), а последовательно, но может в любой момент переключаться между ними, либо выполнять несколько программ параллельно (пусть и не так эффективно, как полноценные два ядра).
А что лучше - 4/8 или 6/6?
Теперь - простой вопрос. Что лучше взять - процессор на 4 ядра и 8 потоков или на 6 физических ядер, но без мультипоточности. Тут все зависит от того, для чего берется компьютер (имею в виду, для каких задач).
Мы ведь помним, что количество потоков никак не влияет на количество физических ядер, а только повышает эффективность их работы, позволяя одновременно обрабатывать сразу два потока данных. Обычно это дает прирост производительности где-то от 5 до 30%.
В 6-ядерном процессоре больше самих конвейеров, и плевать тут на то, что работают они не так эффективно. Запускаем одну тяжелую задачу - процессор на 6 ядер (при условии полной нагрузки на все ядра обоих процессоров) будет сильно быстрее, так как у него тупо больше ядер.
Для примера можно взять i5 9500 и i3 10105F. Они имеют похожую архитектуру, одинаковую буст-частоту и одинаковый поядерный объем L1 и L2 кэшей (64 и 256 кб соответственно). В большинстве задач именно i5 на 6 ядер и 6 потоков окажется быстрее, но всего на 5-10%, а если одновременно нужно выполнять огромную кучу задач - между процессорами установится паритет, так как i3 тупо работает эффективнее.