Я часто читаю, что параллелизм и параллелизм - это разные вещи. Очень часто ответчики / комментаторы заходят так далеко, что пишут, что это две совершенно разные вещи. Тем не менее, на мой взгляд, они связаны, но я хотел бы получить некоторые разъяснения по этому поводу.
Например, если я работаю на многоядерном процессоре и смогу разделить вычисления на х меньшие вычисления (скажем, с использованием fork / join), каждый из которых работает в своем собственном потоке, у меня будет программа, которая выполняет параллельные вычисления (потому что предположительно, в любой момент времени несколько потоков будут работать на нескольких ядрах) и будут параллельными, не так ли?
Хотя, если я просто использую, скажем, Java и работаю с событиями и перерисовками пользовательского интерфейса в потоке диспетчеризации событий, а также запускаю единственный созданный мной поток, у меня будет программа, которая работает одновременно (поток EDT + GC + мой основной поток и т.д.) но не параллельно.
Я хотел бы знать, правильно ли я понимаю, и если параллелизм (в системе «одноядерный, но многоядерный») всегда подразумевает параллелизм или нет?
Кроме того, многопоточные программы работают на многоядерных процессорах, но где разные потоки выполняют совершенно разные вычисления, считающиеся использующими «параллелизм»?
источник
Ответы:
Согласно Википедии :
То есть параллелизм всегда подразумевает параллелизм.
Нет. Суть параллелизма заключается в том, что большая проблема делится на более мелкие, так что меньшие части могут быть решены одновременно. Части взаимно независимы (по крайней мере, в некоторой степени), но они все еще являются частью более крупной проблемы, которая теперь решается параллельно.
Суть параллелизма заключается в том, что несколько потоков (или процессов, или компьютеров) делают что-то одновременно , возможно (но не обязательно), взаимодействуя определенным образом. Википедия снова :
источник
Код может быть параллельным, но не параллельным.
Представьте себе несколько потоков, работающих на одноядерном компьютере. Эта одноядерная машина будет обрабатывать только один поток за раз, поэтому параллелизма операций не будет. Но для каждого потока, благодаря тому, как ОС обрабатывает несколько потоков, каждый поток должен предполагать, что все остальные потоки работают одновременно.
источник
Параллелизм просто означает выполнение множества задач одновременно; с другой стороны, параллелизм - это способность ядра выполнять множество задач, постоянно переключаясь между многими процессами.
Для достижения параллелизма важно, чтобы система имела много ядер только тогда, когда параллелизм может быть достигнут эффективно. И это сильно сказывается на производительности и приводит к большим накладным расходам, если на одноядерном компьютере пробовать параллелизм.
Например, в более ранней системе было только одно ядро, а планировщики ЦП создавали иллюзию параллелизма, постоянно переключаясь между процессами, позволяя каждому процессу прогрессировать.
источник