author:skate
time:2014/06/16
CPU超线程/多核/多路技术
1.cpu超线程技术
线程是程序执行的基本原子单位,一个进程可以由多个线程组成。在分布式程序设计中正确使用线程,能够很好地提高应用程序的性能及运行效率,其实现原理是将一个进程分成多个线程,然后让它们并发异步执行,从而提高运行效率。
所谓“并发执行”,在单核情形下并不是各线程同时执行(占有CPU),在任意时刻还是只能有一个线程占用CPU,只不过它们彼此轮换使用CPU相对频繁一些,感觉上似乎都在运行。
下面通过一个简单的例子来说明超线程的工作原理。
设一个进程要完成两个任务:任务1和任务2,并且任务1要经历A1B1C1三个步骤才能完成,任务2要经历A2B2C2三个步骤才能完成。
①如果两个任务同步执行的话,完成两个任务是这样执行的:
花费时间段:
1 2 3 4 5 6
A1 → B1 → C1 → A2 → B2 → C2
这样从A1到C2只能一个一个地执行,当A1执行时,CPU被占用,B1到C2的线程只能等待,甚至当它们彼此之间并不竞争同一个资源时,也要等待前面的线程执行完毕后才能执行。
②如果两个任务异步执行的话,完成两个任务是这样执行的:
花费时间段:
1 2 3 4 5 6
A1 → B1 → C1
A2 → B2 → C2
这样,任务1和任务2就分成两个独立的执行对象,也就是说: A1B1C1和A2B2C2是并发执行的。当A1在执行某个运算时,A2线程可以去做其他的一些事情,比如访问磁盘等外部设备等。
对比①和②两种执行方式,完成所有任务,方式①需要6个时间段,而方式②只需要3个时间段,方式②所需时间是方式①的一半,所以方式②完成整个任务要快于方式①。
2.cpu多核技术
cpu多核技术的开发源于这样的认识:在单核芯片中,仅仅提高芯片的速度会产生过多的热量,且无法带来所预期的性能改善。多核处理器是单片芯片,能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器使用。通过在两个执行内核之间划分任务,多核处理器可以在特定的时钟周期内执行更多的任务。可以提高80%的性能。
3.如何选择cpu
多核、多路和超线程的选择;多核是由控制器控制并行的,多路是完全独立并行
自己的业务场景需要并发还是并行;多核对并行支持更好一点
业务场景是io密集型还cpu密集型;cpu密集型的cpu越多越好
自己的os和软件对线程和进程支持程度
比如mysql数据库软件是线程模型的,使用了很多全局锁mutex,如果cpu过多的话,那接受的过多的请求就会在mutex上产生争用和cpu大量spin,使系统的性能
反而下降。这样的话mysql就应该选择路数少一点的多核cpu,但总的逻辑cpu数不要太多,目前mysql5.6可以支持到48cpu。
------end------