Я собираюсь предложить ответ, который немного конфликтует с некоторыми из популярных ответов здесь. На мой взгляд, параллелизм - это общий термин, включающий параллелизм. Параллельность применяется к любой ситуации, когда различные задачи или единицы работы перекрываются во времени. Параллелизм более конкретно применяется к ситуациям, когда отдельные единицы работы оцениваются / выполняются в одно и то же физическое время. Причиной параллелизма является ускорение работы программного обеспечения, которое может извлечь выгоду из нескольких физических вычислительных ресурсов. Другой основной концепцией, которая подходит под параллелизм, является интерактивность. Интерактивность применяется, когда перекрытие задач наблюдается из внешнего мира. Смысл интерактивности заключается в создании программного обеспечения, которое реагирует на реальные объекты, такие как пользователи, сетевые коллеги, аппаратные периферийные устройства и т. Д.
Параллельность и интерактивность - это почти полностью независимое измерение параллелизма. Для конкретного проекта разработчики могут заботиться о том или другом, или обо всех. Они имеют тенденцию смешиваться, не в последнюю очередь потому, что мерзость, которая представляет собой нити, дает достаточно удобный примитив для выполнения обоих задач.
Немного подробнее о параллелизме :
Параллелизм существует в очень малых масштабах (например, параллелизм на уровне команд в процессорах), средних масштабах (например, многоядерных процессорах) и больших масштабах (например, высокопроизводительных вычислительных кластерах). В последние годы усилилось давление на разработчиков программного обеспечения с целью раскрытия большего параллелизма на уровне потоков из-за роста многоядерных процессоров. Параллелизм тесно связан с понятием зависимость . Зависимости ограничивают степень, в которой может быть достигнут параллелизм; две задачи не могут выполняться параллельно, если одна зависит от другой (игнорирование предположений).
Существует множество шаблонов и структур, которые программисты используют для выражения параллелизма: конвейеры, пулы задач, агрегатные операции над структурами данных («параллельные массивы»).
Немного подробнее о интерактивности :
Наиболее простой и распространенный способ интерактивности - это события (т. Е. Цикл обработки событий и обработчики / обратные вызовы). Для простых задач отлично подходят события. Попытка выполнить более сложные задачи с событиями приводит к разрыву стека (a.k.a. адбэк обратного вызова; a.k.a. инверсия управления). Когда вам надоели события, вы можете попробовать более экзотические вещи, такие как генераторы, сопрограммы (a.k.a. Async / Await) или совместные потоки.
Ради любви к надежному программному обеспечению, пожалуйста, не используйте темы, если вы хотите интерактивности.
Curmudgeonliness
Мне не нравится лозунг Роба Пайка "параллелизм, это лучше". Параллелизм не лучше и не хуже параллелизма. Параллельность включает в себя интерактивность, которую нельзя сравнивать лучше / хуже с параллелизмом. Это все равно что сказать «поток управления лучше, чем данные».