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