pre*_*per 14 parallel-processing multithreading
我有一个四核处理器.我在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
SharedData.java;
public class SharedData {
private int value;
SharedData() {
value = 0;
}
public void SetValue(int d) {
value = d;
}
public int GetValue() {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我运行程序并检查处理器图形,每个处理器部分看起来在%90左右.
我的问题是; 如果我可以使用这样的系统资源,什么是并行编程?我弄错了吗?我在c#上看到了一个使用处理器数量的例子,这是什么处理?
Tud*_*dor 22
并行编程意味着使用一组资源通过划分工作在更短的时间内解决一些问题.这是抽象的定义,它依赖于这一部分:通过划分工作在更短的时间内解决一些问题.你在代码中显示的并不是并行编程,因为你没有处理数据来解决问题,你只是在多个线程上调用一些方法.虽然这是"平行的",但它并不能在全球范围内解决问题.
处理器负载的问题与并行编程有关,因为并行并行编程旨在使所有计算元素尽可能保持忙碌.但只是保持CPU忙碌并不意味着你正在进行并行编程.
最后,并行编程远远超出了多线程,可以在同一台机器上或不同机器上运行的进程之间进行.
并行编程是整个概念,多线程是进行并行编程的具体方法之一.例如,您还可以通过MapReduce进行并行编程,其中每个任务可以在不同系统上的不同进程上运行.另一方面,多线程程序并不一定意味着程序是并行的.可以在单核机器上运行多线程程序,在这种情况下程序不是并行执行的.
并行编程是多线程的超集(即多线程是并行程序的一种方式,但还有其他方式可以编写并行程序,例如多进程程序)。
线程和进程的主要区别:
同一进程中的线程可以共享内存资源。
进程必须明确地传达他们希望与其他进程共享的任何信息。