【问题标题】:Difference between multi-threading and parallel programming?多线程和并行编程的区别?
【发布时间】:2011-11-25 15:46:55
【问题描述】:

我有一个四核处理器。我在java中编写了类似的代码;

一些.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;
    }
}

程序.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 左右工作。

我的问题是;如果我可以像这样使用系统资源,什么是并行编程?我弄错了吗?我在 c# 上看到了一个使用处理器计数的示例,这是怎么回事?

【问题讨论】:

  • 嗯,保持开放可能是值得的,因为他询问的是他的特定程序而不是一般情况......我不知道。

标签: multithreading parallel-processing


【解决方案1】:

并行编程意味着使用一组资源通过划分工作在更短的时间内解决一些问题。这是抽象的定义,它依赖于这一部分:通过划分工作在更短的时间内解决一些问题。您在代码中显示的不是并行编程,因为您不是在处理数据来解决问题,您只是在多个线程上调用一些方法。虽然这是“并行的”,但它并不能全局解决问题。

处理器负载问题与并行编程有关,因为并行并行编程旨在使所有计算元素尽可能忙碌。但简单地保持 CPU 忙碌并不意味着您在进行并行编程。

最后,并行编程远远超出了多线程,可以在同一台机器或不同机器上运行的进程之间进行。

【讨论】:

  • 那么使用多线程方法是并行编程的一部分,但并行编程不只是使用多线程?
  • @Burak Karakuş:是的,多线程是实现并行的一种方式,但不是唯一的方式。同时,并不是所有多线程的使用都是并行的。
【解决方案2】:

并行编程是整个概念,多线程是进行并行编程的特定方式之一。例如,您还可以通过 MapReduce 进行并行编程,其中每个任务可以在不同系统上的单独进程上运行。另一方面,多线程程序并不一定意味着程序是并行的。可以在单核机器上运行多线程程序,这种情况下程序不会被并行执行。

【讨论】:

    【解决方案3】:

    并行编程是多线程的超集(即多线程是并行程序的一种方式,但还有其他方式可以编写并行程序,例如多进程程序)。

    线程和进程的主要区别:

    同一进程中的线程可以共享内存资源。

    进程必须明确地传达他们希望与其他进程共享的任何信息。

    【讨论】:

    • 其实并行是多线程的超集,不是并行编程...
    最近更新 更多