Этот пример кода сравнивает последовательный метод с потоковым методом на Четырехъядерном процессоре. Код просто использует GetPixel () для чтения всех пикселей из 4 изображений. Я нашел, что скорость составляет приблизительно 65%, почему она не равняется 75%, поскольку у меня есть 4 ядра, и все они полностью используются?
P.S.:
Можно ли проверить код, поскольку я не делаю никакого ввода-вывода, и никакие другие процессы не работают над машинами (нормальные процессы окон)
Это может быть любое количество вещей. Несколько, которые приходят на ум
Скорее всего, он должен конкурировать с другими потоками в некоторой структуре данных или файле, так что вы не получите 100% параллельное выполнение.
Например, если вы должны были запустить операцию типа загрузки веб-страницы с веб-сайта в 4-стороннем параллельном режиме на четырехъядерном процессоре, а сервер разрешает только 1 одновременную загрузку с одного и того же IP-адреса за раз, вы вообще не получите никакого ускорения.
Кроме того, есть некоторые накладные расходы, связанные с развертыванием потоков и их обслуживанием, поэтому вы не получите полную загрузку ядра, когда начнете выполнять параллельную работу, хотя в данном случае это, скорее всего, не играет большой роли.
Потому что есть и другие факторы, которые нужно учитывать. Например, пропускная способность памяти и ввода-вывода, накладные расходы на переключение контекста потоков и т.д.
Многопоточность имеет накладные расходы, и не всегда все может работать параллельно.
В целом, исходя из моего опыта параллельного программирования, если вы получите на 65% меньше времени, это очень хорошо.