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