这个分类的知识来自周伟明先生的《多核计算与程序设计》一书,在此把书中对我个人帮助较大的部分整理出来,以便更容易的在工作中加以应用。
一,多核编程与单核多线程的区别
1, 锁竞争导致的串行化的区别
在单核系统中如果某个线程获取了锁,那么这个线程将获取CPU的运行时间,其他线程将被阻塞。但CPU始终处于运行状态,影响计算时间的其实只是加锁和解锁的时间。并不会发生CPU空闲的现象。
但多核系统中情况发生了本质的变换,如果线程A和B使用同一把锁,但运行在不同的CPU上,如果A得到了锁,那么A线程所在CPU则处于运行状态,线程B处于阻塞状态,B线程所在CPU则处于空闲状态。我们浪费了一个CPU的运算时间。
图示:
2, 线程分解与执行的区别
在单核CPU中,对于客户端软件而言,采用多线程方式通常都是创建线程并将其放在后台执行,避免阻塞客户界面操作,提高性能。而在多CPU中,线程的分解将不再局限与此。多核CPU分解多线程是为了让计算分配到各个CPU核上去执行。大幅度提高工作效率。
3, CPU负载均衡的区别
在单核CPU中,并不需要考虑CPU间负载均衡的问题,因为无论线程如何切换,CPU始终处于工作状态,它并不会影