Какая разница между параллельным и многопоточным программированием?
При многопоточном программировании имеется несколько потоков, которые выполняют разные "программы", взаимодействующие друг с другом. Например, поток пользовательского интерфейса, поток вычислений, поток обработки ввода/вывода. Многопоточное программирование позволяет упростить (при адекватном подходе) архитектуру программы, но требует отдельных навыков при проектировании и отладке.
Параллельное программирование применяется для численных расчетов, или, например, в компьютерной графике. В этом случае "программа" одна, данные разные. Использование конвейеризации и большого количества вычислительных ядер позволяет получить значительный прирост в скорости вычислений.
Параллельное программирование — расчёт чего-либо на нескольких вычислительных ядрах.
Многопоточное программирование — написание программ, работающих в несколько потоков.
Параллельное, но не многопоточное: SETI@Home и прочие распределённые системы.
Многопоточное, но не параллельное: шахматный ИИ работает независимо от интерфейса: пока человек думает, программа считает.