1.并行与并发
并行(Parallelism)与并发(Concurrent):
并行(左图):
在2个处理器上处理2个任务
并发(右图):
在同一个处理器上处理2个任务
在单核处理器中,操作系统微观上上线程分时使用CPU实现宏观上任务并行执行。
2.多核处理器和多处理器
核:微处理器中所有可用的功能单元的集合
多核处理器指CPU中有一个以上执行核,多处理器指多个CPU,对于软件开发者而言,这两者可以不做区分,因为它们都指计算机有多个可供差遣的CPU。
3.串行算法与并行算法
串行算法未必慢。
并行算法更复杂,需要考虑线程共享资源的分配和同步,调试更难。
当要处理的数据量大,数据处理任务繁重,并且任务本身可以分解为独立的子任务时,使用并行算法比较合适。
4.例子:计算数据的方差
问题背景:求100个数的方差
解决方案:将100个数分为4组,每个组的数据分别处理,可以采用使用线程的方式并行处理,或者采用TPL(任务并行库)的方式并行处理。下面是用前者:
class ThreadArgu
{
public double average,sum;
public int range, counter;
public double[] Datalist;
public CountdownEvent cde;
}
class Program
{
static void Main(string[] args)
{
int Datasize = 8;
int process = 4;
CountdownEvent cde = new CountdownEvent(process);//初始计数值10
//随机生成50个数字,放入数组
double[] Datalist=Generate(Datasize);
double sum=0;
ThreadArgu threadargu = new ThreadArgu();
threadargu.cde = cde;
threadargu.Datalist = Datalist;
threadargu.range = Datasize / process;
//计算数组平均值
for (int i = 0; i < Datasize; i++)
{
sum = sum + Datalist[i];
}
threadargu.average = sum / Datasize;
threadargu.counter = 0;
//四个线程并发计算
for (int j =