Разница между многопоточным и параллельным программированием?

У меня есть четырехъядерный процессор. Я закодировал что-то подобное в java;

Some.java;

public class Some extends Thread {
    private SharedData sharedVal;
    private String name;

    public Some(SharedData val, String threadName) {
        sharedVal = val;
        name = threadName;
    }

    public void run() {
        int temp;
        while(true) {
            temp = sharedVal.GetValue() + 1;
            sharedVal.SetValue(temp);
        }
    }
}

SharedData.java;

public class SharedData {
    private int value;

    SharedData() {
        value = 0;
    }

    public void SetValue(int d) {
        value = d;
    }

    public int GetValue() {
        return value;
    }
}

Program.java;

public class Program {
    public static void main(String[] args) {
        SharedData test = new SharedData();

        Some t1 = new Some(test, "thread1");
        Some t2 = new Some(test, "thread2");
        Some t3 = new Some(test, "thread3");
        Some t4 = new Some(test, "thread4");

        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

Я запускаю программу и проверяю процессорную графику, каждая часть процессора работает вокруг% 90.

Мой вопрос: если я могу использовать системные ресурсы, подобные этому, что такое параллельное программирование? Неужели я ошибаюсь? Я видел пример на С#, используя количество процессоров, что с этим связано?

Заметка; Извините за плохой английский.

Ответ 1

Параллельное программирование означает использование набора ресурсов для решения какой-либо проблемы за меньшее время путем деления работы. Это абстрактное определение, и оно зависит от этой части: решить проблему за меньшее время, разделив работу. То, что вы показали в своем коде, - это не параллельное программирование в том смысле, что вы не обрабатываете данные для решения проблемы, вы просто вызываете некоторые методы для нескольких потоков. Хотя это "параллельно", это не глобально решает проблему.

Проблема с нагрузкой процессора связана с параллельным программированием в том смысле, что параллельное параллельное программирование нацелено на то, чтобы все вычислительные элементы были максимально заняты. Но просто поддерживать занятость процессора не означает, что вы выполняете параллельное программирование.

Наконец, параллельное программирование выходит за рамки многопоточности и может иметь место среди процессов, работающих на одном компьютере или на разных машинах.

Ответ 2

Параллельное программирование - это целая концепция, и многопоточность является одним из конкретных способов параллельного программирования. Например, вы также можете выполнять параллельное программирование MapReduce, где каждая задача может выполняться в отдельном процессе на разных системах. С другой стороны, многопоточная программа не обязательно означает, что программа параллельна. На одноядерном компьютере можно запускать многопоточную программу, и в этом случае программа не выполняется параллельно.

Ответ 3

Параллельное программирование представляет собой суперкомпьютер многопоточности (т.е. Многопоточность - это путь к параллельной программе, но есть и другие способы написания параллельных программ, например многопроцессорных программ).

Основное различие между потоками и процессом:

потоки в одном процессе могут совместно использовать ресурсы памяти.

Процессы должны явно передавать любую информацию, которую они хотят передать другим процессам.